1 package com.b510.number2char;2

3 import java.math.BigDecimal;4

5 /**6 * 数字转换为汉语中人民币的大写

7 *8 * @author hongten9 * @contact hongtenzone@foxmail.com10 * @create 2013-08-1311 */12 public class NumberToCN {13 /**14 * 汉语中数字大写15 */16 private static final String[] CN_UPPER_NUMBER = { "零", "壹", "贰", "叁", "肆",17 "伍", "陆", "柒", "捌", "玖" };18 /**19 * 汉语中货币单位大写,这样的设计类似于占位符20 */21 private static final String[] CN_UPPER_MONETRAY_UNIT = { "分", "角", "元",22 "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "兆", "拾",23 "佰", "仟" };24 /**25 * 特殊字符:整26 */27 private static final String CN_FULL = "整";28 /**29 * 特殊字符:负30 */31 private static final String CN_NEGATIVE = "负";32 /**33 * 金额的精度,默认值为234 */35 private static final int MONEY_PRECISION = 2;36 /**37 * 特殊字符:零元整38 */39 private static final String CN_ZEOR_FULL = "零元" + CN_FULL;40

41 /**42 * 把输入的金额转换为汉语中人民币的大写43 *44 * @param numberOfMoney45 * 输入的金额46 * @return 对应的汉语大写47 */48 public static String number2CNMontrayUnit(BigDecimal numberOfMoney) {49 StringBuffer sb = new StringBuffer();50 // -1, 0, or 1 as the value of this BigDecimal is negative, zero, or51 // positive.52 int signum = numberOfMoney.signum();53 // 零元整的情况54 if (signum == 0) {55 return CN_ZEOR_FULL;56 }57 //这里会进行金额的四舍五入58 long number = numberOfMoney.movePointRight(MONEY_PRECISION)59 .setScale(0, 4).abs().longValue();60 // 得到小数点后两位值61 long scale = number % 100;62 int numUnit = 0;63 int numIndex = 0;64 boolean getZero = false;65 // 判断最后两位数,一共有四中情况:00 = 0, 01 = 1, 10, 1166 if (!(scale > 0)) {67 numIndex = 2;68 number = number / 100;69 getZero = true;70 }71 if ((scale > 0) && (!(scale % 10 > 0))) {72 numIndex = 1;73 number = number / 10;74 getZero = true;75 }76 int zeroSize = 0;77 while (true) {78 if (number <= 0) {79 break;80 }81 // 每次获取到最后一个数82 numUnit= (int)(number % 10);83 if (numUnit>0) {84 if ((numIndex == 9) && (zeroSize >= 3)) {85 sb.insert(0, CN_UPPER_MONETRAY_UNIT[6]);86 }87 if ((numIndex == 13) && (zeroSize >= 3)) {88 sb.insert(0, CN_UPPER_MONETRAY_UNIT[10]);89 }90 sb.insert(0, CN_UPPER_MONETRAY_UNIT[numIndex]);91 sb.insert(0, CN_UPPER_NUMBER[numUnit]);92 getZero = false;93 zeroSize = 0;94 } else {95 ++zeroSize;96 if (!(getZero)) {97 sb.insert(0, CN_UPPER_NUMBER[numUnit]);98 }99 if (numIndex == 2) {100 if (number > 0) {101 sb.insert(0, CN_UPPER_MONETRAY_UNIT[numIndex]);102 }103 } else if (((numIndex - 2) % 4 == 0) && (number % 1000 > 0)) {104 sb.insert(0, CN_UPPER_MONETRAY_UNIT[numIndex]);105 }106 getZero = true;107 }108 // 让number每次都去掉最后一个数109 number = number / 10;110 ++numIndex;111 }112 // 如果signum == -1,则说明输入的数字为负数,就在最前面追加特殊字符:负113 if (signum == -1) {114 sb.insert(0, CN_NEGATIVE);115 }116 // 输入的数字小数点后两位为"00"的情况,则要在最后追加特殊字符:整117 if (!(scale > 0)) {118 sb.append(CN_FULL);119 }120 return sb.toString();121 }122

123 public static void main(String[] args) {124 double money = 2020004.01;125 BigDecimal numberOfMoney = new BigDecimal(money);126 String s = NumberToCN.number2CNMontrayUnit(numberOfMoney);127 System.out.println("你输入的金额为:【"+ money +"】 #--# [" +s.toString()+"]");128 }129 }

java人民币大小写转换函数_java开发_数字转换汉语中人民币的大写_完整版相关推荐

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

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

  2. 【Socket网络编程】3.字节序转换函数htons、htonl ,地址转换函数inet_ntoa、inet_ntop、inet_pton、inet_addr

    字节序转换函数htons.htonl 地址转换函数inet_ntoa.inet_ntop.inet_pton.inet_addr 1.字节序转换函数 #include <arpa/inet.h& ...

  3. python实战一个完整的项目-Python项目开发实战(第2版)高清晰PDF完整版+代码

    会写代码≠能做好项目! 1.建立有序生产环境 2.迅速融入开发团队 3.高效处理项目问题 网罗Python项目开发中的流程,让你的编程事半功倍 Python项目与封装/团队开发环境/问题驱动开发/源码 ...

  4. java有没有回调函数_Java中的回调函数 - wangjianme的个人空间 - OSCHINA - 中文开源技术交流社区...

    Java代码的回调函数经常由框架或是系统定义,由程序开发人员填充. 它的最主要特点是即定义了调用的规范同时又非常的灵活. 回调函数有些类似于观察者模式,它们的区别在于:观察者模式返回的参数为Event ...

  5. java的环境变量设置_Java开发环境不再需要配置classpath

    前言: 之前发布了关于java开发环境配置的文章,经过与网友的交流,我了解到在jdk1.5以后,java开发环境配置的时候,确实不需要对classpath进行配置,查阅了一些资料以及与别人的交流,今天 ...

  6. java获取时分秒毫秒_java实现时间格式转换(int整数类型的秒/毫秒---时分秒毫秒)...

    1. 直接上干货:(可提取为工具类收藏哦 ^_^) package com.drew.utils; import java.text.SimpleDateFormat; import java.uti ...

  7. 小程序转换纯数字数字_低代码,快速的应用程序开发和数字转换

    小程序转换纯数字数字 最近,许多低码/无码解决方案在企业中得到了发展,使非技术人员可以选择创建简单的应用程序. 分析人士预测,低码行业将以每年20%以上的速度增长. 但是什么是低码,为什么它如此流行, ...

  8. java使用场景什么意思_Java开发中类隐藏及应用场景分析是什么?

    隐藏是JAVA语言平台中提出来的一个新名词.其次在其他语言平台上,也有类似的说法,只是称呼不一样而已.但是隐藏的功能对于应用程序开发来说,特别是大型应用程序设计,非常的有用.作为一名合格的JAVA平台 ...

  9. 低代码,快速应用开发和数字转换

    最近,许多低码/无码解决方案在企业中得到了发展,从而使非技术人员可以选择创建简单的应用程序. 分析人士预测,低码行业将以每年20%以上的速度增长. 但是什么是低码,为什么它如此流行,它又有什么问题呢? ...

最新文章

  1. R语言单因素重复测量方差分析(one-way repeated measures ANOVA)实战
  2. sp_MSforeachtable/sp_MSforeachdb (转)
  3. ASP.NET Core的路由[4]:来认识一下实现路由的RouterMiddleware中间件
  4. git 删除仓库中的文件夹,但是不删除本地文件夹
  5. mysql+存储器_mysql内存储器计算公式_mysql
  6. phpstorm xdebug本地调试断点不生效_PHPSTORM与xdebug配置
  7. Exception 'ReflectionException' with message 'Class require does not exist'
  8. android 默认分辨率是多少合适,Bluestacks分辨率修改多少合适
  9. java网络编程 - TCP/IP四层模型
  10. 【Python脚本进阶】2.4、conficker蠕虫(终)
  11. Winclone快速安装苹果电脑双系统教程
  12. 96309245通讯异常工行_工商银行信息代码 96309245 是什么意思
  13. 【自用】R语言处理GEO转录组数据记录
  14. python海龟画笔速度_【判断题】Python海龟绘图中,设置画笔绘制速度的函数是speed()。...
  15. php fpm 命令行,php-fpm的命令使用
  16. MVC过滤器使用实例
  17. 埋头工作就能触及 “ 宇宙真理 ”
  18. VCIP2021:GDR中使用HMVP
  19. 一些日文处理的正则表达式(Perl)
  20. Excel数据转化为矩阵

热门文章

  1. 研发效能提升如何层层推进?
  2. vs2005 sp1补丁安装,报1718错误: 数字签名拒绝
  3. 计算机替代手工记账的影响,计算机记账替代手工记账的条件
  4. Reflected File Download Attack
  5. 校园网连接不上 问题解决记录
  6. 科技宜信让金融充满AI
  7. android多级列表
  8. 播放器色觉辅助功能开发,助力提升色觉障碍用户的视频观看体验
  9. UN Comtrade(联合国商品贸易统计数据库)数据爬取Python代码——使用动态IP
  10. 软考新生必看!高项备考经验分享