package tastCase;import java.math.BigDecimal;/*** 数字转换为汉语中人民币的大写<br>*/
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 = "零元" + CN_FULL;/*** 把输入的金额转换为汉语中人民币的大写* * @param numberOfMoney*            输入的金额* @return 对应的汉语大写*/public static String number2CNMontrayUnit(BigDecimal numberOfMoney) {StringBuffer sb = new StringBuffer();// -1, 0, or 1 as the value of this BigDecimal is negative, zero, or// positive.int 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 (!(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);}// 输入的数字小数点后两位为"00"的情况,则要在最后追加特殊字符:整if (!(scale > 0)) {sb.append(CN_FULL);}return sb.toString();}public static void main(String[] args) {//建议使用String money = "2020004.015";BigDecimal numberOfMoney = new BigDecimal(money);String s = NumberToCN.number2CNMontrayUnit(numberOfMoney);System.out.println("你输入的金额为:【"+ money +"】   #--# [" +s.toString()+"]");//你输入的金额为:【2020004.015】   #--# [贰佰零贰万零肆元零贰分]//不建议使用(精度值丢失)double money2 = 2020004.015;BigDecimal numberOfMoney2 = new BigDecimal(money2);String s2 = NumberToCN.number2CNMontrayUnit(numberOfMoney2);System.out.println("你输入的金额为:【"+ money2 +"】   #--# [" +s2.toString()+"]");//你输入的金额为:【2020004.015】   #--# [贰佰零贰万零肆元零壹分]}
}

本文转自:https://www.cnblogs.com/hongten/p/hongten_java_money.html

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

  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. 将数字转换成中文金额的大写形式

    package com.unteck.fms.web.businessdata.controller; import org.springframework.beans.factory.annotat ...

  4. 用原生js把数字转换成货币人民币表示带逗号表示方法

    用原生js把数字转换成货币人民币表示带逗号表示方法 function rmb(str){let strArr = String( parseFloat(str).toFixed(2) ).split( ...

  5. java数字转换32位字符串_java字符串和数字转换工具

    java数字和字符串之间的转换工具 class="java" name="code">package com.xwtec.util; /** * 数字工具 ...

  6. java数字转换中文

    阿拉伯数字转换中文 转换结果: 23 转成 二十三 2.3 转成 二点三 import java.math.BigDecimal;/*** 数字转换中文** @author lbx*/ public ...

  7. java数字转汉语读法

    看到好的东西就想收藏一份,说不定自己哪天就用的上了. public class Test { private static final char[] nums = new char[] { '0', ...

  8. java 数字转换成汉字_Java-String-阿拉伯数字转换成中文汉字数字

    package com.test; public class NumberUtils { private static final String[] UNITS = { "", & ...

  9. java 数字转换开发票大写格式_Java转化数字为大写人民币

    /* * 将小写的人民币转化成大写 */ public static String convertToChineseNumber(double number) { StringBuffer chine ...

  10. java 数字转换开发票大写格式_Java数字转大写金额格式小程序代码

    今天看到可以用toCharArray()可以将字符串转换成数组,跟switch结合做个数字转中文大写金额格式的Java小程序,思路也很简单,全篇用switch.由于是字符串,无需担心输入数字过大,可以 ...

最新文章

  1. 洛谷 P3302 [SDOI2013]森林 主席树+启发式合并
  2. mysql 协议的ResultsetRow包及解析
  3. mysql的联合索引_mysql联合索引
  4. IOS修改设备用户代理UserAgent
  5. 点击下载!《阿里云SRE技术期刊》2021年5月刊发布啦!
  6. 数的直径(两次DFS)
  7. rsa php前台加密后台解密源码,使用RSA实现前端公钥加密后端私钥解密
  8. 图像处理之积分图应用二(快速边缘保留滤波算法)
  9. 泥塑课c语言,【C】泥塑课(From http://www.jisuanke.com/)
  10. Python:Bug 官网不要了,全迁去 GitHub!
  11. Redis开发与运维学习笔记
  12. Visio2016绘制框图的基本操作方法
  13. Spell of the rising moon
  14. 重邮第八届ACM大赛-决赛题解报告
  15. NTC PTC 压敏热敏电阻
  16. java 小说系统_java 实现小说管理系统
  17. 贴一篇感人肺腑激动人心的博客(转自51cto)
  18. 尚硅谷 尚医通学习笔记
  19. 初用MssqlOnLinux 【1】
  20. Windows 小技巧10--Windows常见软件、系统配置

热门文章

  1. uni-app 小程序开发 (一)
  2. 全球ATV DTV制式的分布
  3. linux 迁移类型,迁移到Linux前必须要知道的五个方面
  4. 80286计算机配置,电脑的各种配置给详的细解释.doc
  5. 通信恩仇,5G江湖(转)
  6. 基于STM32(F103ZE)的LD3320语音控制系统
  7. Android Beam 文件传输失败分析与解决
  8. 计算机文件无法移动,电脑上不能拖动文件怎么办 电脑上不能拖动文件如何解决...
  9. HTML布局之grid布局
  10. 小米手机连上无线网却无法上网络连接服务器,连接水星路由器wifi成功但上不了网怎么办?...