java人民币大小写转换函数_java开发_数字转换汉语中人民币的大写_完整版
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开发_数字转换汉语中人民币的大写_完整版相关推荐
- java开发_数字转换汉语中人民币的大写_完整版
转自:https://www.cnblogs.com/hongten/p/hongten_java_money.html 做这个应用,源于突然的一个想法:看到发票上面的数字要转换成汉语中人民币的大写 ...
- 【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& ...
- python实战一个完整的项目-Python项目开发实战(第2版)高清晰PDF完整版+代码
会写代码≠能做好项目! 1.建立有序生产环境 2.迅速融入开发团队 3.高效处理项目问题 网罗Python项目开发中的流程,让你的编程事半功倍 Python项目与封装/团队开发环境/问题驱动开发/源码 ...
- java有没有回调函数_Java中的回调函数 - wangjianme的个人空间 - OSCHINA - 中文开源技术交流社区...
Java代码的回调函数经常由框架或是系统定义,由程序开发人员填充. 它的最主要特点是即定义了调用的规范同时又非常的灵活. 回调函数有些类似于观察者模式,它们的区别在于:观察者模式返回的参数为Event ...
- java的环境变量设置_Java开发环境不再需要配置classpath
前言: 之前发布了关于java开发环境配置的文章,经过与网友的交流,我了解到在jdk1.5以后,java开发环境配置的时候,确实不需要对classpath进行配置,查阅了一些资料以及与别人的交流,今天 ...
- java获取时分秒毫秒_java实现时间格式转换(int整数类型的秒/毫秒---时分秒毫秒)...
1. 直接上干货:(可提取为工具类收藏哦 ^_^) package com.drew.utils; import java.text.SimpleDateFormat; import java.uti ...
- 小程序转换纯数字数字_低代码,快速的应用程序开发和数字转换
小程序转换纯数字数字 最近,许多低码/无码解决方案在企业中得到了发展,使非技术人员可以选择创建简单的应用程序. 分析人士预测,低码行业将以每年20%以上的速度增长. 但是什么是低码,为什么它如此流行, ...
- java使用场景什么意思_Java开发中类隐藏及应用场景分析是什么?
隐藏是JAVA语言平台中提出来的一个新名词.其次在其他语言平台上,也有类似的说法,只是称呼不一样而已.但是隐藏的功能对于应用程序开发来说,特别是大型应用程序设计,非常的有用.作为一名合格的JAVA平台 ...
- 低代码,快速应用开发和数字转换
最近,许多低码/无码解决方案在企业中得到了发展,从而使非技术人员可以选择创建简单的应用程序. 分析人士预测,低码行业将以每年20%以上的速度增长. 但是什么是低码,为什么它如此流行,它又有什么问题呢? ...
最新文章
- R语言单因素重复测量方差分析(one-way repeated measures ANOVA)实战
- sp_MSforeachtable/sp_MSforeachdb (转)
- ASP.NET Core的路由[4]:来认识一下实现路由的RouterMiddleware中间件
- git 删除仓库中的文件夹,但是不删除本地文件夹
- mysql+存储器_mysql内存储器计算公式_mysql
- phpstorm xdebug本地调试断点不生效_PHPSTORM与xdebug配置
- Exception 'ReflectionException' with message 'Class require does not exist'
- android 默认分辨率是多少合适,Bluestacks分辨率修改多少合适
- java网络编程 - TCP/IP四层模型
- 【Python脚本进阶】2.4、conficker蠕虫(终)
- Winclone快速安装苹果电脑双系统教程
- 96309245通讯异常工行_工商银行信息代码 96309245 是什么意思
- 【自用】R语言处理GEO转录组数据记录
- python海龟画笔速度_【判断题】Python海龟绘图中,设置画笔绘制速度的函数是speed()。...
- php fpm 命令行,php-fpm的命令使用
- MVC过滤器使用实例
- 埋头工作就能触及 “ 宇宙真理 ”
- VCIP2021:GDR中使用HMVP
- 一些日文处理的正则表达式(Perl)
- Excel数据转化为矩阵