数值转换成大写金额运算

来源:互联网 发布:如何编写python程序 编辑:程序博客网 时间:2024/05/01 13:02

在记账时,我们经常用大写汉字代替数字进行记账,而我们在数值运算时往往是采用的阿拉伯数字进行的计算,这时我们就需要用到将阿拉伯数值转换成大写金额的数值转换工具,而这篇代码讲的就是这种数值换算运算.


它的大体思想是这样的

一、获取数字阿拉伯数值,假如说该数值是120000,那自然不用说了,如果是1.2 sw(十万),就应该首先将其转换成120000.

二、将该数值转换成大写金额,得到如下数值:壹拾万贰万零仟零佰零拾零

三、将该数值去掉万,得到:壹拾贰零仟零佰零拾零

四、补足丢失的万,得到:壹拾贰万零仟零佰零拾零

五、去掉多余的零,如果是去掉的位数为8-16位,则补上单位万,如果说去掉的位数大于16位,则补上亿,最后再加上圆整即可.


下面是其详细的代码:

package com.cnmoney;public class CnMoney {public static String conversionCharToCnMoney(char s,int index){//s*1是利用自动转型,char乘以整数,可以将char类型转换成整形//该整形是利用ASCII码中的数值进行计算的,在ASCII码中,0对应十进制中的是48,1对应的是49,依此类推int number=s*1-48;String str="";switch(number){case 0:str="零";break;case 1:str="壹";break;case 2:str="贰";break;case 3:str="叁";break;case 4:str="肆";break;case 5:str="伍";break;case 6:str="陆";break;case 7:str="柒";break;case 8:str="捌";break;case 9:str="玖";break;}int unit=-1;if(index%4==0){unit=-1;          //个位(不做处理)}else if(index%4==1){unit=0;           //十位}else if(index%4==2){unit=1;           //百位}else if(index%4==3){unit=2;           //千位}//添加十位,百位,千位单位str+=getBigUnit(unit);if(index/4==0){unit=-1;          //不做处理}else if(index/4==1){unit=3;           //万位}else if(index/4==2){unit=4;           //亿位}str+=getBigUnit(unit);return str;}/** * 取整 * @param str     大写金额 * @return */public static String subStringUnit(String str){//截取多余的万和亿int strLength=str.length();int lastWan=str.lastIndexOf("万");if(lastWan!=-1){lastWan=strLength-lastWan;str=str.replace("万", "");strLength=str.length();str=str.substring(0,strLength-lastWan+1)+"万"+str.substring(strLength-lastWan+1, strLength);//重新获取剪短后的字符串数组的长度strLength=str.length();lastWan=str.lastIndexOf("亿");if(lastWan!=-1){lastWan=strLength-lastWan;str=str.replace("亿", "");strLength=str.length();str=str.substring(0, strLength-lastWan+1)+"亿"+str.substring(strLength-lastWan+1, strLength);}}boolean flag=true;strLength=str.length();int temp=0;for(int i=strLength;i>0;i--){if(i%2==1){if(str.substring(i-1,i).equals("零")){temp+=2;}else{flag=false;break;}}}if(temp!=0){if(!flag){//字符串分割str=str.substring(0, strLength-temp+1);if(temp>8&&temp<16){str+="万";}else if(temp>16){str+="亿";}str+="圆整";}}return str;}/** * 获取大单位 * @param index * @return */public static String getBigUnit(int index){String str="";switch(index){case 0:str="拾";break;case 1:str="佰";break;case 2:str="仟";break;case 3:str="万";break;case 4:str="亿";break;case -1:str="";break;}return str;}/** * 将数值型的数据转换成人民币大写数值 * @param money * @return */public static String conversionToCnMoney(Integer money){String moneyString=String.valueOf(money);int moneyLength=moneyString.length();String str="";for(int i=0;i<moneyLength;i++){char s=moneyString.charAt(i);str+=conversionCharToCnMoney(s,moneyLength-i-1);}//字符串截取str=subStringUnit(str);return str;}/** * 将数值型的数据转换成人民币大写数值 * @return */public static String conversionToCnMoney(Double money,String unit){long unitNumber=getUnitNumber(unit);long moneyLong=(long)(money*unitNumber);String moneyString=String.valueOf(moneyLong);int moneyLength=moneyString.length();String str="";for(int i=0;i<moneyLength;i++){char s=moneyString.charAt(i);str+=conversionCharToCnMoney(s,moneyLength-i-1);}//字符串截取str=subStringUnit(str);return str;}/** * 获取单位数值 * @param unit * @return */public static long getUnitNumber(String unit){long unitNumber=0L;switch(unit){case "s":unitNumber=10L;break;case "b":unitNumber=100L;break;case "q":unitNumber=1000L;break;case "w":unitNumber=10000L;break;case "sw":unitNumber=100000L;break;case "bw":unitNumber=1000000L;break;case "qw":unitNumber=10000000L;break;case "y":unitNumber=100000000L;break;case "sy":unitNumber=1000000000L;break;case "by":unitNumber=10000000000L;break;case "qy":unitNumber=100000000000L;break;case "wy":unitNumber=1000000000000L;break;}return unitNumber;}public static void main(String[] args) {int money=120000;String str=conversionToCnMoney(money);System.out.println(str);money=12;str=conversionToCnMoney(money);System.out.println(str);Double money2=3.14;String unit="by";str=conversionToCnMoney(money2,unit);System.out.println(str);}}


运行的结果:

壹拾贰万圆整壹拾贰叁佰壹拾肆亿圆整



0 0
原创粉丝点击