在最近的开发工作中,需要将数据里的数字金额转为汉语中人民币的大写进行展示,代码如下:

package com.jeecg.com.by.bxcg.util;
import java.math.BigDecimal;/*** 数字转换为汉语中人民币的大写<br>* * @author NickYoung*/public class NumberToCN {/*** 汉语中数字大写*/private static final String[] CN_UPPER_NUMBER = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };/*** 汉语中货币单位大写,这样的设计类似于占位符*/private static final String[] CN_UPPER_MONETRAY_UNIT = { "分", "角", "元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾","佰", "仟", "兆", "拾", "佰", "仟" };/*** 特殊字符:整*/private static final String CN_FULL = "整";/*** 特殊字符:负*/private static final String CN_NEGATIVE = "负";/*** 金额的精度,默认值为2*/private static final int MONEY_PRECISION = 2;/*** 特殊字符:零元整*/private static final String CN_ZEOR_FULL = "零元";/*** 把输入的金额转换为汉语中人民币的大写* * @param numberOfMoney*            输入的金额* @return 对应的汉语大写*/public static String number2CNMontrayUnit(BigDecimal numberOfMoney) {StringBuffer sb = new StringBuffer();// 返回-1:表示该数小于0 0:表示该数等于0 1:表示该数大于0int signum = numberOfMoney.signum();// 零元的情况if (signum == 0) {return CN_ZEOR_FULL;}// 这里会进行金额的四舍五入long number = numberOfMoney.movePointRight(MONEY_PRECISION).setScale(0, 4).abs().longValue();// 得到小数点后两位值long scale = number % 100;int numUnit = 0;int numIndex = 0;boolean getZero = false;// 判断最后两位数,一共有四中情况:00 = 0, 01 = 1, 10, 11if (!(scale > 0)) {numIndex = 2;number = number / 100;getZero = true;}if ((scale > 0) && (!(scale % 10 > 0))) {numIndex = 1;number = number / 10;getZero = true;}int zeroSize = 0;while (true) {if (number <= 0) {break;}// 每次获取到最后一个数numUnit = (int) (number % 10);if (numUnit > 0) {if ((numIndex == 9) && (zeroSize >= 3)) {sb.insert(0, CN_UPPER_MONETRAY_UNIT[6]);}if ((numIndex == 13) && (zeroSize >= 3)) {sb.insert(0, CN_UPPER_MONETRAY_UNIT[10]);}sb.insert(0, CN_UPPER_MONETRAY_UNIT[numIndex]);sb.insert(0, CN_UPPER_NUMBER[numUnit]);getZero = false;zeroSize = 0;} else {++zeroSize;// "分", "角", "元","万", "亿","兆"位不会出现零if (numIndex != 0 && numIndex != 1 && numIndex != 2 && numIndex != 6 && numIndex != 10&& numIndex != 14) {if (!(getZero)) {sb.insert(0, CN_UPPER_NUMBER[numUnit]);}}if (numIndex == 2) {if (number > 0) {sb.insert(0, CN_UPPER_MONETRAY_UNIT[numIndex]);}} else if (((numIndex - 2) % 4 == 0) && (number % 1000 > 0)) {sb.insert(0, CN_UPPER_MONETRAY_UNIT[numIndex]);}getZero = true;}// 让number每次都去掉最后一个数number = number / 10;++numIndex;}// 如果signum == -1,则说明输入的数字为负数,就在最前面追加特殊字符:负if (signum == -1) {sb.insert(0, CN_NEGATIVE);} // 除了0.00其他数据都要带特殊字符:整sb.append(CN_FULL);return sb.toString();}public static void main(String[] args) {double money = 0.00;BigDecimal numberOfMoney = new BigDecimal(money);System.out.println("你输入的金额为:【" + money + "】 #--# [" + NumberToCN.number2CNMontrayUnit(numberOfMoney).toString() + "]");}
}

数字转为汉语中人民币的大写相关推荐

  1. java开发_数字转换汉语中人民币的大写_完整版

    转自:https://www.cnblogs.com/hongten/p/hongten_java_money.html 做这个应用,源于突然的一个想法:看到发票上面的数字要转换成汉语中人民币的大写 ...

  2. java人民币大小写转换函数_java开发_数字转换汉语中人民币的大写_完整版

    1 package com.b510.number2char;2 3 import java.math.BigDecimal;4 5 /**6 * 数字转换为汉语中人民币的大写 7 *8 * @aut ...

  3. DIDI3(数字转为TP,小写转换大写)

    Sub DINI3处理() Dim i As Integer i = 1  Sheet2.Cells(1, i).EntireColumn.Delete          '符合条件的都删除整行  S ...

  4. Java数字转换为人民币的大写

    工具类: import java.math.BigDecimal;/*** 数字转换为人民币的大写*/ public class NumberToCN {/*** 汉语中数字大写*/private s ...

  5. 数字转换为人民币的大写(复制直接用)

    Java中把数字转换为人民币大写格式 import java.math.BigDecimal;public class NumberToCN {/*** 汉语中数字大写*/private static ...

  6. C#通用类库--数字转为人民币汉字大写表示

    //类名:EcanRMB //作用:数字转换为人民币大写 //作者:刘典武 //时间:2010-12-04 using System; using System.Collections.Generic ...

  7. 浮点数字转换成人民币的大写字体

    新开博客,贴上一段平常时写的代码,权当记录和分享. 下面是代码块(有比较详细的注释,转换过程中需要注意的是0的处理): //浮点数字转换成人民币的大写字体 import java.util.Scann ...

  8. 零基础实操 | Python实现数字转人民币(大写汉字)源代码

    大家好,我是吒吒. 我们的工作中遇到一些问题,不依靠工具的话,改起来真的超级麻烦,还会遗漏.有个小伙伴提出怎么把数字转成人民币(大写汉字),Python还真的可以做到,并且挺简单的,新手都可以操作.下 ...

  9. java数字人民币转大写的方法及注意事项

    最近做需求,需要用到数字人民币转大写的方法,项目里面本身就有相应的工具方法,我就直接拿来用,结果到了生产上就有bug,原来是double类型十进制转二进制后小数点后的精度问题.于是自己总结写了一个比较 ...

  10. Excel数字 转 人民币 繁体大写

    第一种方法:通过函数嵌套实现 数字转人民币大写形式的公式是: =IF(B1<0,"金额为负无效", (IF(OR(B1=0,B1=""),"(人 ...

最新文章

  1. 计算机试题高考作文阅卷组对考生,2017年广东高考评卷收尾
  2. linux环境下作业调度,Linux集群环境下作业调度算法的研究与实现
  3. codeforces gym-101755 D-Transfer Window 二分图匹配、递归
  4. Hive UDF,就这
  5. python表白代码-python浪漫表白源码
  6. sublime text的插件emmet的功能介绍页
  7. flink Table API 与SQL入门实战
  8. android 对象输出到文件
  9. JDBC单独了解一下
  10. 人脸识别之人脸识别技术综述
  11. mysql还原数据库非常慢_mysql还原数据库慢
  12. %02x与%2x 之间的区别
  13. 家里两个路由器,Wifi名相同密码相同,请问手机会自动选择信号强的路由器连接吗?
  14. S700K提速道岔电路故障的处理方法【铁路信号技术专栏】—转自微信公众号高速铁路信号技术交流
  15. LiveData实践
  16. 提高电脑运行速度--关闭电脑无用服务
  17. 论文参考文献中括号+数字转上标
  18. java socket通信 客户端_JavaのSocket编程之简单客户端与服务器端通信
  19. 使用 DHTML 与 XML 制作 Ajax 幻灯片
  20. 郑航计算机专业就业率,郑州航空工业管理学院好就业吗?附学校就业率最高的专业名单...

热门文章

  1. 2019腾讯广告算法大赛解析
  2. 怎样在Apple Silicon M1 Mac上引导到恢复模式
  3. 2030年中国GDP将超越美国成为世界第一?
  4. 点击编辑按钮,前端table表格行内指定td可修改。(table是动态生成的)
  5. java web,添加删除文本框
  6. 学生个人网页设计作品 学生个人网页模板 简单个人主页成品 个人网页制作 HTML学生个人网站作业设计
  7. Omapl138 AT070TN83 lcd驱动移植
  8. https://download.csdn.net/download/kuyu27537830/1322930#comment
  9. 在HBuilderX的git上导入github项目/把项目传到github
  10. vue使用高德地图获取当前经纬度