java,转人民币大写,工具类

完整工具类如下:

package com.example.demo.utils;import java.math.BigDecimal;/*** @author* @version 1.0* @description: 支持到 9999万亿元 以下的转换* @date 2022/6/9 18:14*/
public class Decimal2CnUtil {/*** 汉语中数字大写*/private static final String[] CN_UPPER_NUMBER = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};/*** 四分段计法*/private static final String[] UPPER_MONETARY_UNIT = {"", "拾", "佰", "仟"};/*** 特殊字符:整*/private static final String CN_FULL = "整";/*** 特殊字符:负*/private static final String CN_NEGATIVE = "负";/*** 特殊字符:零*/private static final String ZERO_NUM = "零";/*** 金额的精度,默认值为2*/private static final int MONEY_PRECISION = 2;/*** 特殊字符:零元整*/private static final String CN_ZERO_FULL = "零元" + CN_FULL;/*** 把输入的金额转换为汉语中人民币的大写** @param numberOfMoney 输入的金额* @return 对应的汉语大写*/public static String number2CNMonetaryUnit(BigDecimal numberOfMoney) {StringBuilder sb = new StringBuilder();// -1, 0, or 1 as the value of this BigDecimal is negative, zero, or positive.int signNum = numberOfMoney.signum();// 零元整的情况if (signNum == 0) {return CN_ZERO_FULL;}// 这里会进行金额的四舍五入long number = numberOfMoney.movePointRight(MONEY_PRECISION).setScale(0, 4).abs().longValue();// 得到小数点后两位值long scale = number % 100;String sc = changeScale2String(scale);number = (number / 100);long first4Pos = number % 10000L;String fir4Pos = change4Pos2String(first4Pos);number = number / 10000;long second4Pos = number% 10000L;String sec4Pos = change4Pos2String(second4Pos);number = number / 10000;long third4Pos = number % 10000L;String thi4Pos = change4Pos2String(third4Pos);number = number / 10000;long four4Pos = number % 10000L;String fo4Pos = change4Pos2String(four4Pos);/*** 目前支持到 9999万亿元以下的转换*/if(fo4Pos.length() > 1){sb.append(fo4Pos).append("萬");}if(thi4Pos.length() > 1){sb.append(thi4Pos).append("億");}if(sec4Pos.length() > 1){sb.append(sec4Pos).append("萬");}if(fir4Pos.length() > 1){sb.append(fir4Pos).append("圆");}sb.append(sc);String result = removeLeftZero(sb.toString());if(signNum < 0){return CN_NEGATIVE + result;}return result;}/*** 每4位一个万,处理返回4位结果* @param num* @return*/private static String change4Pos2String(long num){if(num == 0){return ZERO_NUM;}StringBuilder sb = new StringBuilder();int time = 3;int init = 1000;long val = num / init;while(time >= 0){num = num % init;if(val == 0){if(!sb.toString().endsWith(ZERO_NUM)){sb.append(ZERO_NUM);}}else{sb.append(CN_UPPER_NUMBER[(int) val]).append(UPPER_MONETARY_UNIT[time]);}init = init / 10;if(init != 0){val = num / init;}time--;}return removeRightZero(sb.toString());}/*** 小数点后单独处理,仅限2位* @param scale* @return*/private static String changeScale2String(long scale){if(scale  == 0){return "整";}else if(scale % 10 == 0){return CN_UPPER_NUMBER[(int)scale/10] + "角";}else{return CN_UPPER_NUMBER[(int)scale/10] + "角" + CN_UPPER_NUMBER[(int)scale % 10] + "分";}}/*** 去除左侧的零* @param sb* @return*/private static String removeLeftZero(String sb){while(sb.startsWith(ZERO_NUM)){sb = sb.substring(1);}return sb;}/*** 去除右侧的零* @param sb* @return*/private static String removeRightZero(String sb){while(sb.endsWith(ZERO_NUM)){sb = sb.substring(0, sb.length() - 1);}return sb;}public static void main(String[] args) {// String je ="4302085.7";// String je ="1,3120,0021,0003.45";String je ="1312000210003.45";BigDecimal numberOfMoney = new BigDecimal(je);String s = Decimal2CnUtil.number2CNMonetaryUnit(numberOfMoney);System.out.println(s);}}

Decimal转人民币大写java实现相关推荐

  1. 根据人民币大写规则写的java工具类

    需求场景:传入一个数字,把它转成人民币大写. 先看下人民币大写规则: 一.人民币大写金额数字到"元"为止的.在"元"之后.应写"整"(或&q ...

  2. 人民币大写转阿拉伯数字的java实现

    人民币大写转阿拉伯数字的工具类,简单粗暴的替换就完事了 import java.util.HashMap; import java.util.Map;public class ValueConvert ...

  3. java实现阿拉伯数字转人民币大写(精确到分)

    这是一个将阿拉伯数字转人民币大写的工具类, 精确到人民币大写分 package com.client;import java.math.BigDecimal;/*** Class Descriptio ...

  4. Java实现人民币大写+GUI界面

    项目资源下载链接Java实现人民币大写+GUI界面 文章标题 1.提要 2.算法 3. 代码 (1)界面:windowbuilder插件的使用 (2)实现人民币转换的类 Convert.java (3 ...

  5. java中人民币的符号怎么打_Java学习笔记---字符串操作(人民币大写转换的实现)...

    向开始学习语言的的同学们推荐下,如果你想学习语言的某个特性,比方说数据库编程,或者网络编程,最好找一个实用的例子,然后不懂的去翻书,去查资料,这样目的性就很强了,个人感觉比对着语法书敲上面的例子效率要 ...

  6. java方法转换大写日期及人民币大写转换方式 .txt

    java方法转换大写日期及人民币大写转换方式 2012-03-02 14:38:03| 分类: java |字号 订阅 /** * 阿拉伯数字与中文数字(大小写)之间的转换 * */ import j ...

  7. java将日期格式转大写_java方法转换大写日期及人民币大写转换方式 .txt

    java方法转换大写日期及人民币大写转换方式 2012-03-02 14:38:03| 分类: java |字号 订阅 /** * 阿拉伯数字与中文数字(大小写)之间的转换 * */ import j ...

  8. 人民币大写转小写,及人民币格式判断

    第一种方式 package com.sinux.qunz.utils; import java.io.Serializable; import java.util.regex.Matcher; imp ...

  9. js 数字转人民币大写

    目前网上有许多的数字转人民币大写功能,但是在某些数字上就回出现错误, 比如501356,这个转换之后,有的会转换成 "伍拾万零壹仟叁佰伍拾陆" ,单位万和千紧密相连,中间是不需要 ...

最新文章

  1. 通俗理解PCA降维作用
  2. CISCO CME:配置基于硬件的电话会议
  3. JDK动态代理实现简单AOP--转
  4. 如何使用 Python 进行时间序列预测?
  5. .NET Core Tools 1.0 版本
  6. Harmonic Number (II) LightOJ - 1245(找规律?大数f(n)=n/1+n/2+n/3+......+n/n)
  7. 随机生成从大到小排序python_随机快速排序(使用Python描述)
  8. 独家 | 林元庆新征程:创立AIbee估值8亿,毗邻百度,吴恩达助攻
  9. Java 定制工具库 —— Print(import static)
  10. 22条你不知道的微营销干货
  11. 【应用推荐】常见资源管理器整理,内含使用体验和个人使用推荐
  12. win10鼠标主题linux,win10系统安装鼠标指针主题包的操作方法
  13. IReader Silverlight电子阅读器介绍开源项目
  14. k3导入账套_K3金蝶维护绝密(内部技术教程)
  15. html怎么偏左居中,word文档偏左怎么调到中间
  16. 黑盒测试方法之错误推测法概述
  17. mysql的genelog_小白实战课堂!转录因子的候选靶基因查询~~
  18. 新入职如何快速的熟悉项目
  19. 【Materials Studio学习六】构建固液表面
  20. 跨次元!目标检测类别超20000!

热门文章

  1. 什么是SR-IOV?先用起来再说
  2. 飞康NSS助力大型国企财务公司云灾备建设
  3. 为大家推荐几个不错的学习公众号
  4. 真快乐APP强势开局,国美跑步进入零售下半场
  5. STM32 单片机 GY-906 MLX90614 红外温度读取
  6. aspmaker学习手记
  7. R-Breaker策略交易代码,适用MT4,MT5平台
  8. 关于打印机监控(基于 windows )
  9. Java学习笔记(未完成.....)
  10. 数据库期末考试预习之候选码,最小函数依赖集,3NF分解算法,判断第几范式