数字转为汉语中人民币的大写
在最近的开发工作中,需要将数据里的数字金额转为汉语中人民币的大写进行展示,代码如下:
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() + "]");}
}
数字转为汉语中人民币的大写相关推荐
- java开发_数字转换汉语中人民币的大写_完整版
转自:https://www.cnblogs.com/hongten/p/hongten_java_money.html 做这个应用,源于突然的一个想法:看到发票上面的数字要转换成汉语中人民币的大写 ...
- java人民币大小写转换函数_java开发_数字转换汉语中人民币的大写_完整版
1 package com.b510.number2char;2 3 import java.math.BigDecimal;4 5 /**6 * 数字转换为汉语中人民币的大写 7 *8 * @aut ...
- DIDI3(数字转为TP,小写转换大写)
Sub DINI3处理() Dim i As Integer i = 1 Sheet2.Cells(1, i).EntireColumn.Delete '符合条件的都删除整行 S ...
- Java数字转换为人民币的大写
工具类: import java.math.BigDecimal;/*** 数字转换为人民币的大写*/ public class NumberToCN {/*** 汉语中数字大写*/private s ...
- 数字转换为人民币的大写(复制直接用)
Java中把数字转换为人民币大写格式 import java.math.BigDecimal;public class NumberToCN {/*** 汉语中数字大写*/private static ...
- C#通用类库--数字转为人民币汉字大写表示
//类名:EcanRMB //作用:数字转换为人民币大写 //作者:刘典武 //时间:2010-12-04 using System; using System.Collections.Generic ...
- 浮点数字转换成人民币的大写字体
新开博客,贴上一段平常时写的代码,权当记录和分享. 下面是代码块(有比较详细的注释,转换过程中需要注意的是0的处理): //浮点数字转换成人民币的大写字体 import java.util.Scann ...
- 零基础实操 | Python实现数字转人民币(大写汉字)源代码
大家好,我是吒吒. 我们的工作中遇到一些问题,不依靠工具的话,改起来真的超级麻烦,还会遗漏.有个小伙伴提出怎么把数字转成人民币(大写汉字),Python还真的可以做到,并且挺简单的,新手都可以操作.下 ...
- java数字人民币转大写的方法及注意事项
最近做需求,需要用到数字人民币转大写的方法,项目里面本身就有相应的工具方法,我就直接拿来用,结果到了生产上就有bug,原来是double类型十进制转二进制后小数点后的精度问题.于是自己总结写了一个比较 ...
- Excel数字 转 人民币 繁体大写
第一种方法:通过函数嵌套实现 数字转人民币大写形式的公式是: =IF(B1<0,"金额为负无效", (IF(OR(B1=0,B1=""),"(人 ...
最新文章
- 计算机试题高考作文阅卷组对考生,2017年广东高考评卷收尾
- linux环境下作业调度,Linux集群环境下作业调度算法的研究与实现
- codeforces gym-101755 D-Transfer Window 二分图匹配、递归
- Hive UDF,就这
- python表白代码-python浪漫表白源码
- sublime text的插件emmet的功能介绍页
- flink Table API 与SQL入门实战
- android 对象输出到文件
- JDBC单独了解一下
- 人脸识别之人脸识别技术综述
- mysql还原数据库非常慢_mysql还原数据库慢
- %02x与%2x 之间的区别
- 家里两个路由器,Wifi名相同密码相同,请问手机会自动选择信号强的路由器连接吗?
- S700K提速道岔电路故障的处理方法【铁路信号技术专栏】—转自微信公众号高速铁路信号技术交流
- LiveData实践
- 提高电脑运行速度--关闭电脑无用服务
- 论文参考文献中括号+数字转上标
- java socket通信 客户端_JavaのSocket编程之简单客户端与服务器端通信
- 使用 DHTML 与 XML 制作 Ajax 幻灯片
- 郑航计算机专业就业率,郑州航空工业管理学院好就业吗?附学校就业率最高的专业名单...
热门文章
- 2019腾讯广告算法大赛解析
- 怎样在Apple Silicon M1 Mac上引导到恢复模式
- 2030年中国GDP将超越美国成为世界第一?
- 点击编辑按钮,前端table表格行内指定td可修改。(table是动态生成的)
- java web,添加删除文本框
- 学生个人网页设计作品 学生个人网页模板 简单个人主页成品 个人网页制作 HTML学生个人网站作业设计
- Omapl138 AT070TN83 lcd驱动移植
- https://download.csdn.net/download/kuyu27537830/1322930#comment
- 在HBuilderX的git上导入github项目/把项目传到github
- vue使用高德地图获取当前经纬度