java实现中文大写金额转小写数字

原文地址:https://blog.csdn.net/Moneywa/article/details/97233159

上面原文博客,在处理 “叁拾壹亿叁仟万元” 这种 上亿 的金额时会有问题。需要做一些完善:

/*** @version 创建时间:2020年8月25日 下午3:15:56* * * * 原文链接:https://blog.csdn.net/Moneywa/article/details/97233159* 上述原文处理 上亿 金额会有点问题,本class是晟哥修正之后的版本,目前无误。**/
public class Regcap{/*** @param args*/public static void main(String[] args) {String rr = "伍佰万圆整";BigDecimal int1 = chinese2Number(rr);System.out.println(rr + "---chinese2Number:" + int1);System.out.println();rr = "伍佰陆拾万元整";int1 = chinese2Number(rr);System.out.println(rr + "---chinese2Number:" + int1);System.out.println();rr = "伍佰陆拾万圆整";int1 = chinese2Number(rr);System.out.println(rr + "---chinese2Number:" + int1);System.out.println();rr = "叁仟肆佰伍拾陆万元整";int1 = chinese2Number(rr);System.out.println(rr + "---chinese2Number:" + int1);System.out.println();rr = "叁仟肆佰伍拾陆万肆仟捌佰伍拾捌元伍角";int1 = chinese2Number(rr);System.out.println(rr + "---chinese2Number:" + int1);System.out.println();rr = "叁仟肆佰伍拾陆万零壹佰捌拾陆元伍角";int1 = chinese2Number(rr);System.out.println(rr + "---chinese2Number:" + int1);System.out.println();rr = "叁仟肆佰伍拾陆万壹佰捌拾陆元伍角";int1 = chinese2Number(rr);System.out.println(rr + "---chinese2Number:" + int1);System.out.println();rr = "叁拾壹亿叁仟万元人民币";int1 = chinese2Number(rr);System.out.println(rr + "---chinese2Number:" + int1);System.out.println();rr = "伍万贰仟零叁拾壹亿叁仟万元人民币";int1 = chinese2Number(rr);System.out.println(rr + "---chinese2Number:" + int1);System.out.println();rr = "壹亿肆仟万元整";int1 = chinese2Number(rr);System.out.println(rr + "---chinese2Number:" + int1);}private static char[] cnNum = new char[]{'零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'};private static char[] unitArr = new char[]{'厘', '分', '角', '圆', '拾', '佰', '百','仟','千', '万', '亿'};/*** https://blog.csdn.net/Moneywa/article/details/97233159*/public static BigDecimal chinese2Number(String chineseNumber) {BigDecimal result = new BigDecimal(0);int lastUnitIndex = 0, num = 0;boolean nor = true; //nor这个标记,专门用来标记是否同时存在“亿” 和 “万”这两个单位。chineseNumber = chineseNumber.replace("元", "圆");for (int i = 0; i < chineseNumber.length(); i++) {boolean isUnit = true; //标记当前位是否是单位,而不是数字char c = chineseNumber.charAt(i);for (int j = 0; j < cnNum.length; j++) {// 是数字if (c == cnNum[j]) {// 数字值 = 索引num = j;isUnit = false;break;}}if (isUnit) {// 第一个就是单位,如:拾伍万圆整if (i == 0) {num = 1;}int unitIndex = getUnitIndex(c);BigDecimal unit = getUnit(c);BigDecimal yi = new BigDecimal("100000000.00"); //1亿if (unitIndex > lastUnitIndex) {result = result.add(new BigDecimal(num)).multiply(unit);} else {result = result.add(new BigDecimal(num).multiply(unit));}/*** 当nor=true 并且  当result大于1亿时,做如下处理。* 这里所做的判断是:* (1)unitArr[9] 是 万,如果之后的字符中有 “万”,则需要先将大于1亿的result除以10000,从而方便加上之后的“X仟X佰X拾X万”。* (2)当处理到“万”这个字符之后,result乘以10000,刚好可以将刚才的除以10000补回来。* */if (nor&&result.compareTo(yi)>-1) { for (int k = i+1; k < chineseNumber.length(); k++) {char tmp = chineseNumber.charAt(k);if (tmp==unitArr[9]) {result = result.divide(new BigDecimal("10000.00"));nor = false;}}}lastUnitIndex = unitIndex;num = 0;}//            System.out.println("--------------------------------------"+i+"---" + result);}return result.setScale(2,BigDecimal.ROUND_DOWN);}private static int getUnitIndex(char c) {for (int j = 0; j < unitArr.length; j++) {if (c == unitArr[j]) {return j;}}return 0;}private static BigDecimal getUnit(char c) {double num = 0;int unitIndex = getUnitIndex(c);switch (unitIndex) {// '厘', '分', '角', '圆', '拾', '佰', '仟', '万', '亿'case 4:num = 10;break;case 5:num = 100;break;case 6:num = 100;break;case 7:num = 1000;break;case 8:num = 1000;break;case 9:num = 10000;break;case 10:num = 100000000;break;case 3:num = 1;break;case 2:num = 0.1;break;case 1:num = 0.01;break;case 0:num = 0.001;break;default:break;}return new BigDecimal(num);}}

main方法运行结果:

伍佰万圆整---chinese2Number:5000000.00

伍佰陆拾万元整---chinese2Number:5600000.00

伍佰陆拾万圆整---chinese2Number:5600000.00

叁仟肆佰伍拾陆万元整---chinese2Number:34560000.00

叁仟肆佰伍拾陆万肆仟捌佰伍拾捌元伍角---chinese2Number:34564858.50

叁仟肆佰伍拾陆万零壹佰捌拾陆元伍角---chinese2Number:34560186.50

叁仟肆佰伍拾陆万壹佰捌拾陆元伍角---chinese2Number:34560186.50

叁拾壹亿叁仟万元人民币---chinese2Number:3130000000.00

伍万贰仟零叁拾壹亿叁仟万元人民币---chinese2Number:5203130000000.00

壹亿肆仟万元整---chinese2Number:140000000.00

《转载+完善》java实现中文大写金额转小写数字相关推荐

  1. 如何把大写金额变为小写数字_怎样将带有小数点的小写数字转化为大写

    Excel要将人民币小写金额转换成大写格式,将自定义格式类型中的"G/通用格式"改为G/通用格式"元"" 来实现.但在转换小数时却出现了问题,比如12 ...

  2. java实验——中文大写金额

    声明RMB人民币类如下,实现其中的成员方法 题目分析:最重要的是考虑如何转换整数金额.首先找到小数点的位置,将金额分为小数和整数部分分别处理.对于整数部分按亿,万,千四位一分进行处理.目前转换范围还存 ...

  3. 【C语言】小写数字金额转换成中文大写金额

    1. 更新说明 添加与 "零圆整" 等价的预先判断 (0 / 0. / 0.0 / 0.00 / . / .0 / .00) 修复了因使用函数 strdup 导致的内存泄漏 除去输 ...

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

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

  5. JAVA科学计数法,金额数字,转换为中文大写字

    网上看到别人的代码,觉得很好,收藏下来 网上其他人的代码大多是只能转换整数最多13位,一般转换方案都是下面两种(第一种看完都不想再当码农了,第二种看似挺好, 但是处理起来截取字符串麻烦,容易因规则太复 ...

  6. java 将中文数字转阿拉伯数字

    java 将中文数字转为阿拉伯数字 由于项目需求要将中文数字转为阿拉伯数字,找了一些博客有些不满足需求.于是参考了一些博客完成以下代码 /*** 中文数字*/private static char[] ...

  7. php 小写数字转换大写中文

    /**     *数字金额转换成中文大写金额的函数     *String Int  $num  要转换的小写数字或小写字符串     *return 大写字母     *小数位为两位     **/ ...

  8. 【Java】将阿拉伯数字金额转化为中文大写金额表示

    今天老师即兴布置了一个作业,将阿拉伯数字金额转化为中文大写金额表示,假设数字上限为小于10亿,可以支持2位小数,如: 100000001--壹亿零壹元整 100100011--壹亿零壹拾万零壹拾壹元整 ...

  9. java 大写金额_java实现整数转化为中文大写金额的方法

    这篇文章主要介绍了java实现整数转化为中文大写金额的方法,感兴趣的小伙伴们可以参考一下 在日常生活中,我们经常会将阿拉伯数字转化为中文大写的情况:"零", "壹&quo ...

最新文章

  1. qsort()的用法
  2. Angular自学笔记(一)ngModule 元数据
  3. JDBC连接数据库教程,postgreSQL
  4. 李洋疯狂C语言之求素数的方法
  5. 【maven】 在 MyEcplise上使用maven搭建Web项目
  6. 安卓 qemu 运行linux,在Qemu的beagleboard上运行Android
  7. Py6S模块安装过程(Win10环境,64位)
  8. 前端用户体验提升系列(一)最常见的用户体验指标和提升方式
  9. SqlMap免Python环境绿色版下载
  10. 计算理论重点——Theory of Computation
  11. 代理模式简介与实现 - delegate
  12. 特斯拉开火,状告5名前员工、小鹏汽车、Zoox身陷漩涡...
  13. f(t)=tu(t)matlab,设f(t)=ε(t)-ε(t-1),f1(t)=f(t)cos(10πt),试用MATLAB...
  14. FE内容付费系统源码
  15. 第十一届蓝桥杯省赛完整解析(Java 大学B组)
  16. 易迅网接入微信支付,为消费者提供购物体验
  17. 文档中如何插入计算机剪贴画,如何在Word中使用菜单命令插入图片和剪贴画
  18. 办理充电宝移动电源GB/T35590-2017费用多少钱
  19. 【无重复字符的最长子串--三种方法】
  20. activity的作用

热门文章

  1. \src\core\plainobjectbase.h(311): error C2338: YOU_TRIED_CALLING_A_VECTOR_METHOD_ON_A_MATRIX
  2. 大端和小端的含义及判断代码
  3. Linux服务器企业级安全加固
  4. 外部app扫码进入自己app的下载页面
  5. 如何从google play 网页下载app到本地
  6. 计算给定日期的周历(得到某天是周几)
  7. 记DMA冲突引发的血案
  8. 企业网站SEO优化效果不理想,这几点做对了吗?
  9. ERP系统SAP简介
  10. Mac笔记本插上电源后无法充电,拔掉电源后依然显示【充电中】,解决方法重置SMC