数值转换成大写金额运算
来源:互联网 发布:如何编写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
- 数值转换成大写金额运算
- 将数值型金额转换成大写金额
- 数值转换为中文大写-------金额
- 金额转换成大写
- 金额转换成大写
- 金额转换成大写
- 人民币金额由阿拉伯数值转换成汉字大写数值的函数
- ASP小写金额转换成大写金额
- 小写金额转换成大写金额
- 数字金额转换成大写金额
- 小写金额转换成中文大写金额
- 小写金额转换成大写金额
- 小写金额转换成中文大写金额
- 金额小数转换成中文大写金额
- 将数字金额转换成大写金额
- 大写金额转换成阿拉伯数字金额
- [python]数字金额转换成大写金额
- 数字转换成大写金额
- windows关闭进程 批处理端口占用
- ACM另一种阶乘问题
- 骑士游历
- 博客搬家
- poj 3481 double Queue(Splay树 模板解读)
- 数值转换成大写金额运算
- 第一道非二叉树题
- 关于TCP、HTTP、Socket的自我理解
- 第七届蓝桥杯大学生C组java决赛题目 密文搜索
- git 推送多个远程仓库
- 续写
- 【04】SSH练习——简单分页查询的实现
- 解析argc argv在php中的应用
- [bzoj1001][bjoj2006] 吸氧羊♂灰太狼 最小割