最近在作东西的时候,需要使用中文数字与阿拉伯数字进行互相转换.在网搜了一下效果并不是十分理想.没有办法只好自己动手.
现在拿出来与大家分享,并不断完善.
需要注意的一些地方:
1.目前最大上限是以亿为单位.
2.没有实现中文大写钱数的互换.
3.实用的是int型数字,这样上限大概是以十亿为单位.
4.有些中文的数字习惯没有处理(“4亿”=“4万万”,“一十一”=“十一”,“零”=“0”等等)
Java代码如下
/**
*
*
*
*@author<ahref="yzy0612@163.com">yangzhenyu</a>
*
*@version$Revision$
*
*@since2010-8-26
*/
publicclassNumberUtils {
/*
*基本数字单位;
*/
privatestaticfinalString[]units=
{"千","百","十",""};//个位
/*
*大数字单位;
*/
privatestaticfinalString[]bigUnits=
{"万","亿"};
/*
*中文数字;
*/
privatestaticfinalchar[]numChars=
{'一','二','三','四','五','六','七','八','九'};
//private static final char[] numMouneyChars =
//{ '壹', '贰',
'叁', '肆', '伍',
'陆', '柒', '捌',
'玖' };
privatestaticcharnumZero='零';
/**
*将中文数字转换为阿拉伯数字;
*
*@paramnumberCN
*@return
*/
publicstaticintnumberCN2Arab(String
numberCN) {
String tempNumberCN = numberCN;
//异常数据处理;
if(tempNumberCN ==null)
{
return0;
}
/*
*nums[0]保存以千单位;nums[1]保存以万单位;nums[2]保存以亿单位;
*/
String[] nums =newString[bigUnits.length+
1];
//千位以内,直接处理;
nums[0] = tempNumberCN;
/*
*分割大数字,以千为单位进行运算;
*/
for(inti
= (bigUnits.length- 1); i >= 0; i--) {
//是否存在大单位(万,亿...);
intfind = tempNumberCN.indexOf(bigUnits[i]);
if(find != -1) {
String[] tempStrs = tempNumberCN.split(bigUnits[i]);
//清空千位内容;
if(nums[0] !=null)
{
nums[0] =null;
}
if(tempStrs[0] !=null)
{
nums[i + 1] = tempStrs[0];
}
if(tempStrs.length>
1) {
tempNumberCN = tempStrs[1];
if(i == 0) {
nums[0] = tempStrs[1];
}
}else{
tempNumberCN =null;
break;
}
}
}
String tempResultNum ="";
for(inti
= nums.length- 1; i >= 0; i--) {
if(nums[i] !=null)
{
tempResultNum +=numberKCN2Arab(nums[i]);
}else{
tempResultNum +="0000";
}
}
returnInteger.parseInt(tempResultNum);
}
/**
*将一位中文数字转换为一位数字;eg:一返回1;
*
*@paramonlyCNNumber
*@return
*/
publicstaticintnumberCharCN2Arab(charonlyCNNumber)
{
if(numChars[0]
== onlyCNNumber) {
return1;
}elseif(numChars[1]
== onlyCNNumber || onlyCNNumber =='两') {//处理中文习惯用法(二,两)
return2;
}elseif(numChars[2]
== onlyCNNumber) {
return3;
}elseif(numChars[3]
== onlyCNNumber) {
return4;
}elseif(numChars[4]
== onlyCNNumber) {
return5;
}elseif(numChars[5]
== onlyCNNumber) {
return6;
}elseif(numChars[6]
== onlyCNNumber) {
return7;
}elseif(numChars[7]
== onlyCNNumber) {
return8;
}elseif(numChars[8]
== onlyCNNumber) {
return9;
}
return0;
}
/**
*将一位数字转换为一位中文数字;eg:1返回一;
*
*@paramonlyArabNumber
*@return
*/
publicstaticcharnumberCharArab2CN(charonlyArabNumber)
{
if(onlyArabNumber =='0')
{
returnnumZero;
}
if(onlyArabNumber >'0'&&
onlyArabNumber <='9') {
returnnumChars[onlyArabNumber
-'0'- 1];
}
returnonlyArabNumber;
}
/**
*
*@paramnum
*@return
*/
publicstaticString
numberArab2CN(Integer num) {
String tempNum = num +"";
//传说中的分页算法;
intnumLen = tempNum.length();
intstart = 0;
intend = 0;
intper = 4;
inttotal = (int)
((numLen + per - 1) / per);
intinc = numLen % per;
/*
* 123,1234,1234四位一段,进行处理;
*/
String[] numStrs =newString[total];
for(inti
= total - 1; i >= 0; i--) {
start = (i - 1) * per + inc;
if(start < 0) {
start = 0;
}
end = i * per + inc;
numStrs[i] = tempNum.substring(start, end);
}
String tempResultNum ="";
intrempNumsLen = numStrs.length;
for(inti
= 0; i < rempNumsLen; i++) {
//小于1000补零处理;
if(i > 0 && Integer.parseInt(numStrs[i]) < 1000) {
tempResultNum +=numZero
+numberKArab2CN(Integer.parseInt(numStrs[i]));
}else{
tempResultNum +=numberKArab2CN(Integer.parseInt(numStrs[i]));
}
//加上单位(万,亿....)
if(i < rempNumsLen - 1) {
tempResultNum +=bigUnits[rempNumsLen - i - 2];
}
}
//去掉未位的零
tempResultNum = tempResultNum.replaceAll(numZero+"$","");
returntempResultNum;
}
/**
*将千以内的数字转换为中文数字;
*
*@paramnum
*@return
*/
privatestaticString
numberKArab2CN(Integer num) {
char[] numChars = (num +"").toCharArray();
String tempStr ="";
intinc =units.length-
numChars.length;
for(inti
= 0; i < numChars.length; i++) {
if(numChars[i] !='0')
{
tempStr +=numberCharArab2CN(numChars[i]) +units[i + inc];
}else{
tempStr +=numberCharArab2CN(numChars[i]);
}
}
//将连续的零保留一个
tempStr = tempStr.replaceAll(numZero+"+",numZero+"");
//去掉未位的零
tempStr = tempStr.replaceAll(numZero+"$","");
returntempStr;
}
/**
*处理千以内中文数字,返回4位数字字符串,位数不够以"0"补齐;
*
*@paramnumberCN
*@return
*/
privatestaticString
numberKCN2Arab(String numberCN) {
if("".equals(numberCN))
{
return"";
}
int[] nums =newint[4];
if(numberCN !=null)
{
for(inti
= 0; i <units.length; i++) {
intidx = numberCN.indexOf(units[i]);
if(idx > 0) {
chartempNumChar = numberCN.charAt(idx - 1);
inttempNumInt =numberCharCN2Arab(tempNumChar);
nums[i] = tempNumInt;
}
}
//处理十位
charones = numberCN.charAt(numberCN.length() - 1);
nums[nums.length- 1] =numberCharCN2Arab(ones);
//处理个位
if((numberCN.length() == 2 || numberCN.length() == 1)
&& numberCN.charAt(0) =='十')
{
nums[nums.length- 2] = 1;
}
}
//返回结果
String tempNum ="";
for(inti
= 0; i < nums.length; i++) {
tempNum += nums[i];
}
return(tempNum);
}
}
原文地址http://blog.csdn.net/yzy0612/article/details/5843069
分享到:
相关推荐
在Java编程语言中,将中文数字转换为阿拉伯数字是一个常见的需求,特别是在处理中文文本数据时。这个场景下,我们有一个名为“中文数字转成阿拉伯数字 java 实现”的压缩包,包含了一个实现此功能的Java包和一个单元...
首先,我们需要理解阿拉伯数字与中文数字之间的对应关系。阿拉伯数字有10个基本符号(0-9),而中文小写数字也有对应的十个汉字(零、一、二、三、四、五、六、七、八、九)。我们可以通过创建一个映射表来存储这种...
在Java中,我们可以创建一个映射表,存储阿拉伯数字与中文数字的对应关系,然后编写一个方法来实现转换。以下是一个简单的实现: ```java public class NumberToChinese { private static final String[] units = ...
这篇文章将详细介绍java实现阿拉伯数字转换为中文数字的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。 java阿拉伯数字转中文数字的重要性在于,它可以应用于各种需要将数字转换为中文的场景,例如在...
Java 中实现数字金额到中文大写字符的转换是指将阿拉伯数字转换成中文大写的过程。本文将详细介绍 Java 实现数字金额到中文大写字符的转换的知识点。 知识点一: 数字金额到中文大写字符的转换的需求 在实际应用中...
JAVA实现阿拉伯数字金额转汉语大写是指使用JAVA语言将阿拉伯数字金额转换为汉语大写格式的过程。该过程主要涉及到数字金额的处理和汉语大写格式的转换。 在该过程中,需要定义两个数组upChinese和upChinese2,分别...
在编程领域,尤其是在Java开发中,有时我们需要将数字转换成中文读法,以便于用户更加直观地理解数据。这个需求通常出现在财务、报表或者人机交互界面等场景。标题所提及的问题是:“Java设计输入‘12345’显示‘一...
8. 编程实践:我们通过实践了解了如何使用Java语言将阿拉伯数字转换为中文大写数字,并掌握了编程的基本技术和方法。 通过这个示例代码,我们掌握了阿拉伯数字转换为中文大写的技术和方法,并了解了编程语言基础和...
使用java编程实现将人民币大写转换为阿拉伯数字。本程序仅实现万元以下的人民币转换,输入数据必须以元结尾。
java程序代码,阿拉伯数字转化为大写
本文档将介绍Java语言中实现数字信封的过程和原理,尽管没有提供具体的技术细节,但我们可以从概念上探讨数字信封的基本知识点。 数字信封的过程主要涉及两个关键技术:对称加密技术和非对称加密技术。对称加密技术...
有些变态的报表需要把数字转换成英文输出,但愿这个能帮得到你 one hundred eighty-eight thousand, eight hundred one hundred eighty-eight thousand, eight hundred one one hundred eighty-eight thousand, ...
本文将详细介绍如何使用 Java 实现人民币金额数字转换成大写的解决方案。 Java 中的 NumberFormat 类 在 Java 中,NumberFormat 类是用于格式化数字的类。它提供了多种格式化方式,例如整数、浮点数、货币等。...
《数字图像处理:JAVA语言实现》是一门涵盖了图像处理理论与实践的教程,它通过JAVA编程语言来讲解和实现各种图像处理技术。本教程旨在帮助学习者深入理解图像处理的基本概念,掌握用JAVA进行图像处理的方法,并能...
将阿拉伯数字转化成汉字金钱 如1234.45转化为壹仟贰佰叁拾肆元肆角伍分
综上所述,这个项目提供了从生成证书到实现数字信封加解密的完整流程,对于理解和学习Java中的加密技术,特别是与数字信封相关的概念,是一个非常实用的实例。通过运行SealEnvelope-OpenEnvelope-demo,开发者可以...
总的来说,将阿拉伯数字转换为金额的汉字大写是Java在财务领域中的一项基础应用,它体现了编程语言处理日常业务问题的能力。通过理解并实现这样的功能,开发者不仅可以加深对Java编程的理解,也能更好地服务于财务...
本篇将深入探讨“七参数转换”在Java中的实现,并通过名为"SevenParamsDemo"的示例程序进行详细讲解。 七参数转换是一种解决地心坐标系之间转换的方法,它包括三个平移参数(x、y、z)、三个旋转参数(α、β、γ)...
在java中通过ImageMagick安装包和im4java.jar把其他格式图片如HEIC转换为PNG,JPEG等常用格式图片。内有安装操作步骤及编码内容。亲测有效。 场景运用:ios操作系统在前端图片格式上传中。已普遍采用HEIC格式图片。...
在这个场景中,我们将深入探讨C语言和Java如何实现MD5数字签名。 首先,MD5数字签名是基于MD5算法的。MD5通过特定的计算过程,将数据转换为128位的散列值,这个值是唯一的,只要原始数据发生微小变化,MD5值就会...