需求:读入一个浮点数值,将其转化为中文金额的大写形式。如123.45,转化为:壹佰贰拾叁元肆角伍分。 以下是各种情况要完善:

1. 当金额为整数,只表示整数部分,省略小数部分,并添加“整”字。如123表示为:壹佰贰拾叁元整。

2.当金额中含有连续的0时,只需写一个“零”即可。如10005表示为:壹万零伍元整。3.10的表示形式。如120表示为:壹佰贰拾元整。而10则表示为:拾元整。

 1 public class ConvertNumberToUpper {
 2     public static void main(String agrs[]) {
 3         // 整数
 4         System.out.println(digitUppercase(0)); // 零元整
 5         System.out.println(digitUppercase(123)); // 壹佰贰拾叁元整
 6         System.out.println(digitUppercase(1000000)); // 壹佰万元整
 7         System.out.println(digitUppercase(100000001)); // 壹亿零壹元整
 8         System.out.println(digitUppercase(1000000000)); // 壹拾亿元整
 9         System.out.println(digitUppercase(1234567890)); // 壹拾贰亿叁仟肆佰伍拾陆万柒仟捌佰玖拾元整
10         System.out.println(digitUppercase(1001100101)); // 壹拾亿零壹佰壹拾万零壹佰零壹元整
11         System.out.println(digitUppercase(110101010)); // 壹亿壹仟零壹拾万壹仟零壹拾元整
12         System.out.println();
13         // 小数
14         System.out.println(digitUppercase(0.12)); // 壹角贰分
15         System.out.println(digitUppercase(123.34)); // 壹佰贰拾叁元叁角肆分
16         System.out.println(digitUppercase(97001.34)); // 壹佰贰拾叁元叁角肆分
17         System.out.println(digitUppercase(1000000.56)); // 壹佰万元伍角陆分
18         System.out.println(digitUppercase(100000001.78)); // 壹亿零壹元柒角捌分
19         System.out.println(digitUppercase(1000000000.90)); // 壹拾亿元玖角
20         System.out.println(digitUppercase(1234567890.03)); // 壹拾贰亿叁仟肆佰伍拾陆万柒仟捌佰玖拾元叁分
21         System.out.println(digitUppercase(1001100101.00)); // 壹拾亿零壹佰壹拾万零壹佰零壹元整
22         System.out.println(digitUppercase(110101010.10)); // 壹亿壹仟零壹拾万壹仟零壹拾元壹角
23
24         // 负数
25         System.out.println(digitUppercase(-0.12)); // 负壹角贰分
26         System.out.println(digitUppercase(-123.34)); // 负壹佰贰拾叁元叁角肆分
27         System.out.println(digitUppercase(-1000000.56)); // 负壹佰万元伍角陆分
28         System.out.println(digitUppercase(-100000001.78)); // 负壹亿零壹元柒角捌分
29         System.out.println(digitUppercase(-1000000000.90)); // 负壹拾亿元玖角
30         System.out.println(digitUppercase(-1234567890.03)); // 负壹拾贰亿叁仟肆佰伍拾陆万柒仟捌佰玖拾元叁分
31         System.out.println(digitUppercase(-1001100101.00)); // 负壹拾亿零壹佰壹拾万零壹佰零壹元整
32         System.out.println(digitUppercase(-110101010.10)); // 负壹亿壹仟零壹拾万壹仟零壹拾元壹角
33     }
34
35     /**
36      * 数字金额大写转换,思想先写个完整的然后将如零拾替换成零 要用到正则表达式
37      */
38     public static String digitUppercase(double n) {
39         String fraction[] = { "角", "分"};
40         String digit[] = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
41         String unit[][] = { { "元", "万", "亿"}, { "", "拾", "佰", "仟"}};
42
43         String head = n < 0 ? "负" : "";
44         n = Math.abs(n);
45
46         String s = "";
47         for (int i = 0; i < fraction.length; i++) {
48             s += (digit[(int) (Math.floor(n * 10 * Math.pow(10, i)) % 10)] + fraction[i]).replaceAll("(零.)+", "");
49         }
50         if (s.length() < 1) {
51             s = "整";
52         }
53         int integerPart = (int) Math.floor(n);
54
55         for (int i = 0; i < unit[0].length && integerPart > 0; i++) {
56             String p = "";
57             for (int j = 0; j < unit[1].length && n > 0; j++) {
58                 p = digit[integerPart % 10] + unit[1][j] + p;
59                 integerPart = integerPart / 10;
60             }
61             s = p.replaceAll("(零.)*零$", "").replaceAll("^$", "零") + unit[0][i] + s;
62         }
63         return head + s.replaceAll("(零.)*零元", "元").replaceFirst("(零.)+", "").replaceAll("(零.)+", "零").replaceAll("^整$", "零元整");
64     }
65 }

Java版 数字金额大写转换相关推荐

  1. java银行金额大写转换_Java版 数字金额大写转换

    package com.utils; public class Change { public static void main(String agrs[]) { //整数 System.out.pr ...

  2. Java数字金额大写转换

    最初(来自CSDN,看到的也是转载贴,未注明出处,侵删) 其实这种工具类网上有很多,但个人感觉这个逻辑更加清晰,所以后面都是在这版的基础是进行修改 public class ConvertNumber ...

  3. 数字金额大写转换Java工具类

    Mark一下: 摘取自 若依框架com.hanhua.common.core.text.Convert /*** 数字金额大写转换 先写个完整的然后将如零拾替换成零** @param n 数字* @r ...

  4. mysql金额数字转成中文_数字金额大写转换(可以处理整数,小数,负数)

    数字金额大写转换(可以处理整数,小数,负数) 代码 //数字金额大写转换 function upDigit(n) { var fraction = ['角', '分']; var digit = [' ...

  5. html5 选择金额样式,[JavaScript] 数字金额大写转换 v2

    几天前分享了一段 JavaScript 版的<整数金额大写转换>,不过只能处理整数的. 刚刚做了一个改进,可以处理两位小数(角和分)和负数(欠款). function digit_uppe ...

  6. [JavaScript] 数字金额大写转换 v2

    几天前分享了一段 JavaScript 版的<整数金额大写转换>,不过只能处理整数的. 刚刚做了一个改进,可以处理两位小数(角和分)和负数(欠款). [javascript] view p ...

  7. java实现数字金额转换成汉字大写金额

    我们经常在做项目的财务报表,需要打印发票等情况时需要用到小写的财务金额要转换成汉字的大写金额,下面就是实现该功能的代码 import java.lang.Math; /** *通用型金钱转换类 * * ...

  8. java字母数字互相转换

    一个简单使用ascii码转换字母数字的工具类 也可以深度拓展,用于转换ascii码中任意字符 ascii码参考链接:https://ascii.org.cn/ public class LetterC ...

  9. java实现数字金额转换中文大写金额

    直接贴代码吧! public class CnNumberUtils {private final static Logger logger = LoggerFactory.getLogger(CnN ...

最新文章

  1. 在DataTable中添加行和列数据
  2. iPhone内运行python,返回Killed: 9 ,iOS内安装python2.7等问题的解决方法
  3. java 大数据处理类 BigDecimal 解析
  4. 文件名利用RLO技术欺骗(学习)
  5. 如何用最低的成本教育出最棒的孩子?看完这些公众号你就知道了
  6. linux与磁盘相关的内容
  7. Java知多少(68)面向字符的输出流
  8. Tair持久存储系列技术解读
  9. 2篇word文档比较重复率_论文深耕 | 论文重复率太高怎么办?7个降重技巧收好了!...
  10. Linux设置环境变量小结:设置永久变量临时变量 全局变量局部变量
  11. 阿里 AI「一对多」挑战人类律师;谷歌或将推出自研手机和电脑芯片;JavaScript诞生25周年|极客头条...
  12. 再不了解PostgreSQL,你就晚了之PostgreSQL主从流复制部署...
  13. influxDB的安装和简单使用
  14. FPGA编程中常用的经典方法及技巧(图像处理-映射技术)
  15. 新入手了台IBM Thinkpad T60笔记本 重装系统
  16. html中设置表格标题的代码,设置表格标题的html代码是什么_WEB前端开发
  17. MX Player不支持此音频格式(EAC3)
  18. zabbix用户和组权限、admin密码的修改
  19. 烟气排放在线监测数据采集器
  20. SQLServer2000安装图解

热门文章

  1. 超值买卖?惠普企业收购头部超算制造商Cray,仅13亿美元
  2. Erlang之父Joe Armstrong去世
  3. 谷雨钜献 | 用深度学习理解遥感图像,识别效率提升90倍,PaddlePaddle中科院遥感地球所...
  4. 本部裁员、分部招人,科技公司的岗位都奔向了外地?
  5. 马斯克又把吹过的牛实现!“无聊公司”测试隧道首次亮相,时速高达80公里...
  6. 离职盗取代码、倒卖获利800万,北京西二旗程序员被逮捕
  7. 旷视COCO获奖团队亲述:我们是如何两年拿下7个冠军的
  8. 想象力惊人!只凭一句话,AI就能脑补出动漫小片
  9. 转:浅析C++中的this指针
  10. Linux Device Tree