当前位置: 首页 > news >正文

java金额数字转中文

java金额数字转中文

运行结果:
在这里插入图片描述会进行金额的四舍五入。

工具类源代码:

/*** 金额数字转为中文*/
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) {double money = 2020004.0099999999;BigDecimal numberOfMoney = new BigDecimal(money);String s = NumberToCN.number2CNMontrayUnit(numberOfMoney);System.out.println("你输入的金额为:【" + money + "】   #--# [" + s.toString() + "]");}}
http://www.lryc.cn/news/288842.html

相关文章:

  • Ubuntu findfont: Font family ‘SimHei‘ not found.
  • mysql小知识
  • Unity中URP下逐顶点光照
  • Spring Boot3整合Druid(监控功能)
  • 使用Gin框架,快速开发高效的Go Web应用程序
  • 【Unity】【游戏开发】Pico打包后项目出现运行时错误如何Debug
  • 一种解决常用存储设备无法被电脑识别的方法
  • Spark运行架构以及容错机制
  • 短剧APP小程序源码 全开源短视频系统源码/h5/app/小视频系统
  • 深度学习中图像分类、目标检测、语义分割、实例分割哪个难度大,哪个检测精度容易实现,哪个速度低。请按照难度、精度容易实现程度、速度排名。
  • 【AI视野·今日NLP 自然语言处理论文速览 第七十五期】Thu, 11 Jan 2024
  • 数据结构:搜索二叉树 | 红黑树 | 验证是否为红黑树
  • 数据结构顺序表
  • 手把手教你优雅的安装虚拟机 Ubuntu —— 图文并茂
  • 源 “MySQL 5.7 Community Server“ 的 GPG 密钥已安装,但是不适用于此软件包。请检查源的公钥 URL 是否配置正确。
  • springboot核心有几层架构
  • css3表格练习
  • 项目实战——Qt实现FFmpeg音视频转码器
  • AI数字人-数字人视频创作数字人直播效果媲美真人
  • 初识C语言·动态内存开辟
  • 机器学习 | 利用Pandas进入高级数据分析领域
  • 三、计算机理论-计算机网络-物理层,数据通信的理论基础,物理传输媒体、编码与传输技术及传输系统
  • ERROR Failed to get response from https://registry.npm.taobao.org/ 错误的解决
  • overflow产生的滚动条样式设置
  • Ubuntu环境vscode配置Log4cplus库
  • vue中,使用file-saver导出文件,下载Excel文件、下载图片、下载文本
  • 【VUE】v-if 和 v-show 大详解(多角度分析+面试简答版)
  • mac intel jdk安装与配置
  • Backtrader 文档学习-Bracket Orders
  • Python编程 从入门到实践(项目二:数据可视化)