java

您所在的位置:网站首页 java将数字转换成大写 java

java

2024-07-11 13:55| 来源: 网络整理| 查看: 265

该工具使用java完成,用于金额转换。把小写的金额转换成大写的金额,包括小数部分。因为是调试出来的,所以代码上看会有点复杂。转换最大金额为999999999999.99,整数12位,小数2位。

步骤:

1,入参数据处理,入参分割为整数和小数两部分。

2,整数部分处理及优化。

3,小数部分处理。

其中整数部分处理逻辑比较复杂,设计到万位、亿位的单位处理。整数是通过for循环一位一位拼接的;关于中间出现零的情况做了大量的判断,导致代码比较复杂。如果测试出bug请留言,附上测试参数!代码有详细的注释耐心看完,阅读完代码才能做bug处理。

​​​​​​人民币转换(小写转为大写).java_CY_99的博客-CSDN博客

此功能做了优化,点击此处查看

代展示码 public static String upperCase2(double money){ String[] upNum = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"}; String[] danwei = {"圆","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟"}; //取消科学记数法 NumberFormat numFormat = NumberFormat.getInstance(); numFormat.setMaximumFractionDigits(2);//设置小数位个数 numFormat.setGroupingUsed(false);//取消科学技术发 String formatNum = numFormat.format(money); String strmoney = formatNum + "";//浮点型转为字符型 String lastUpNum = "null"; //用于存放上个参数的值 String result = "";//返回的结果 String[] split = strmoney.split("\\."); String strMoney = split[0]; String point = ""; //小数部分取值处理。 if(split.length>1){ point = split[1]; if(point.length()==1){ point = point.concat("0"); } }else { point = "0"; } //大于12位就直接返回。 int moneyLen = strMoney.length(); if(money==0){ return "零圆整"; } if(moneyLen>12){ return "金额:"+money+"元,超出大写转换范围。最大金额:999999999999.99元"; } //整数(integer)部分处理。 if(!"0".equals(strMoney)){ for (int i = 0; i < moneyLen; i++) { String strNum = strMoney.charAt(i)+""; int singleNum = Integer.parseInt(strNum); String upSingleNum = upNum[singleNum]; //上一为不等于0的情况 if(!"零".equals(lastUpNum)){ if(!"零".equals(upSingleNum)){ result = result.concat(upSingleNum).concat(danwei[moneyLen-i-1]); }else //为零但是在万、亿位上要加单位 (moneyLen-i)==9 指的是单位:亿。 (moneyLen-i)==5指的是单位:万 if( (moneyLen-i)==5 || (moneyLen-i)==9 ){ lastUpNum=""; }else { result=result.concat(upSingleNum); } } //上一位为0的情况 if("零".equals(lastUpNum) && !"零".equals(upSingleNum)){ result = result.concat(upSingleNum).concat(danwei[moneyLen-i-1]); } //捕捉上一位数(lastUpNum)为零的情况做优化。 if((moneyLen-i)==5 || (moneyLen-i)==9 ){ //排除加单位时前面为"零"的情况。如:两百零万 if("零".equals(lastUpNum)||"null".equals(lastUpNum)){ result = result.substring(0,result.length()-1); } if(!result.endsWith("亿")){ result = result.concat(danwei[moneyLen-i-1]); } lastUpNum=""; }else { //把当前大写数字复制给 lastUpNum 用于下次判断 lastUpNum = upSingleNum; } } //对几万元整和几亿元整(result:五万零或者五亿零零)做优化。 result=result.replaceAll("零零","零"); if(result.endsWith("零")){ String substring = result.substring(0,result.length() - 1); result = substring; } result = result.concat("圆"); result = result.replaceAll("圆圆","圆"); result = result.replaceAll("万万","万"); } //小数(point)部分处理 if("0".equals(point)){ result = result+"整"; }else { //去 整 // if(result.endsWith("整")){ // result = result.substring(0,result.length()-1); // } if((point.charAt(0)+"").equals("0")){ result = result.concat(upNum[Integer.parseInt(point.charAt(1)+"")]+"分"); }else if((point.charAt(1)+"").equals("0")){ result = result.concat(upNum[Integer.parseInt(point.charAt(0)+"")]+"角"); }else { result = result.concat(upNum[Integer.parseInt(point.charAt(0)+"")]+"角").concat(upNum[Integer.parseInt(point.charAt(1)+"")]+"分"); } } return result; } 测试

代码:因为测试数值太大会出现科学计数法,取消科学技术就能查看小写原数值。

public static void main(String[] args) { NumberFormat instance = NumberFormat.getInstance(); instance.setGroupingUsed(false); double num = 20100104600.01; String salary = instance.format(num); String s = upperCase2(num); System.out.println("你的工资为:"+num+"元(取消科学记数法:"+salary+"元)\n大写金额:"+s); }

结果:

版权归属作者(CY_99),未经许可,严禁转载!

可以分享该篇博客——2021-12-28



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3