做财务模块时,客户要求使用大写金额来显示数字金额,这时便用到了浮点数转大写金额工具类

1、浮点数转大写金额工具类 AmountUtil.java:

import java.math.BigDecimal;/*** 浮点数转为大写金额* * @author lizhou*/
public class AmountUtil {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();}
}

2、测试:

public static void main(String[] args) {// 数字金额double money = 58636.26;// 转为BigDecimal对象,防止精度丢失BigDecimal bigDecimal = new BigDecimal(String.valueOf(money));// 浮点数转为大写金额System.out.println(number2CNMontrayUnit(bigDecimal));
}

输出结果为:伍万捌仟陆佰叁拾陆元贰角陆分

如您在阅读中发现不足,欢迎留言!!!

Java中浮点数转大写金额工具类相关推荐

  1. java中常用的日期工具类

    java中常用的日期工具类 日期相关的类: package net.yto.ofclacct.core.util;import java.text.ParseException; import jav ...

  2. java中定义一个CloneUtil 工具类

    其实所有的java对象都可以具备克隆能力,只是因为在基础类Object中被设定成了一个保留方法(protected),要想真正拥有克隆的能力, 就需要实现Cloneable接口,重写clone方法.通 ...

  3. java中文件操作的工具类

    代码: package com.lky.pojo;import java.io.BufferedReader; import java.io.BufferedWriter; import java.i ...

  4. Java中操作字符串的工具类-判空、截取、格式化、转换驼峰、转集合和list、是否包含

    场景 某些常用的对字符串进行处理的方法抽离出来成工具类,方便在多处应用. 常用的操作为: 判断是否为空 截取字符串 格式化文本 字符串转set 字符串转list 下划线转驼峰命名 是否包含字符串 注: ...

  5. JAVA中实用的一个工具类--Hutool

    什么是Hutool Hutool是一个Java工具包,也就是一个工具箱,一个utils集合,它帮助我们简化每一行代码,减少每一个方法,让Java语言也可以简单粗暴.Hutool最初是作者项目中&quo ...

  6. java中时间常用处理工具类-DateUtils

    仅供参考,收录了一些常用的java中关于时间的处理方法,希望能帮到你! import org.apache.commons.lang3.time.DateFormatUtils;import java ...

  7. java中常用到的工具类使用

    Tool 不定期更新,建议收藏,收录日常所用 1,判断对象是否为空的常用工具类 2,对象和数组的复制 3,关于拼接字符串去掉最后一个符号的三种方式 4,判断对象值属性不为null并且不为空字符串 5, ...

  8. JWT|概述|JWT结构|JWT在java中的使用|JWT工具类的封装|JWT在springboot中的使用|JWT与拦截器的配合

    JWT ! 前记: 官网:https://jwt.io/ jwt有人说是用计算力换空间(相对于session) 小程序后台要求全部用springboot实现..登录状态的管理:本来想用自己随便生成UU ...

  9. java中操作时间的常用工具类

    在开发中经常会遇到操作时间类的业务,虽然代码部分并不算难,但为了今后查找和使用方便,现将常用的几种操作时间的工具类代码予以罗列,以便今后参考: 下面直接上代码,难度不大,诸位小伙伴可自行参考,酌情使用 ...

  10. java des 加密工具的使用,Java中DES加密解密工具类的实现实例

    这篇文章主要介绍了Java实现的DES加密解密工具类,结合具体实例形式分析了Java实现的DES加密解密工具类定义与使用方法,需要的朋友可以参考下 本文实例讲述了Java实现的DES加密解密工具类.分 ...

最新文章

  1. 机器学习的门槛再度降低,AI小白如何用5分钟搞定建模?
  2. linux不能挂载手机,这个无法挂载的信息是怎么回事?
  3. build.xml java打包_配置pom.xml用maven打包java工程的方法(推荐)
  4. 【微信小程序企业级开发教程】订阅消息功能
  5. SQL语句错误:Operand should contain 1 column(s)【查询多个字段不用加括号】
  6. 【渝粤教育】国家开放大学2018年秋季 0033-21T工程数学 参考试题
  7. 【Linux】XXX is not in the sudoers file …… 的解决方案
  8. 5G NR协议栈----总体架构
  9. MIUI11新版本推送,小米10 Pro跑分轻松突破60万
  10. 市场营销读后感_好书共赏市场营销原理——带你探索市场营销成功的奥秘 !...
  11. python用tesseract-ocr做图像识别
  12. LocED-Location-aware Energy Disggregation Framework
  13. 推荐系统实践---第一章:好的推荐系统
  14. 概率机器人-贝叶斯滤波
  15. 解决SVN没有中文选项
  16. 【网上商城】--图片保存位置分析
  17. 杰理之ANC降噪基本原理【篇】
  18. 设有一组初始记录关键字序列(K1,K2,…,Kn),要求设计一个算法能够在O(n)的时间复杂度内将线性表划分成两部分,其中左半部分的每个关键字均小于Ki,右半部分的每个关键字均大于Ki。
  19. MATLAB——KNN分类器实例
  20. Homebrew进阶使用教程(二)-用一个命令行天气客户端构建自己的仓库

热门文章

  1. Sentaurus入门(1):工艺仿真
  2. java servlet web网上花店商城系源码
  3. CI框架 where 跟 OR 怎么连用
  4. 金三银四,冰河为你整理了这份20万字134页的面试圣经!!
  5. Javascript分割/截取/连接字符串
  6. cread(creade吹风机)
  7. 解析信号与希尔伯特变换
  8. 键盘指示灯亮着 按键全部失效了怎么办
  9. 基于SSM的个人博客系统(数据库+源码)
  10. 局域网传文件_Mac下最好用的跨平台文件传输工具