import java.math.BigDecimal;/*** 数字转换为汉语中人民币的大写<br>* */
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.01;BigDecimal numberOfMoney = new BigDecimal(money);String s = NumberToCN.number2CNMontrayUnit(numberOfMoney);System.out.println("你输入的金额为:【"+ money +"】   #--# [" +s.toString()+"]");}
}

java实现金钱数字转大写相关推荐

  1. 金钱数字转换为大写中文

    效果图如下:  private void zhuanhuan_Click(object sender, EventArgs e)         {                         ...

  2. java将小写数字变成大写输出

    import java.util.Scanner; public class Cap { //方法1 将小写数字变成大写并输出switch private static void capitalNum ...

  3. C 统计数字和大写字母和小写字母的个数

    image.png 从键盘输入一行字符,分别统计其中大写字母和小写字母的个数 实例 #include <stdio.h>int main(void) {char str;int digit ...

  4. java转大写_java实现数字转大写的方法

    java实现数字转大写的方法 说明: 将数字金额转大写,如下: public class Test { /** * @param args * add by zxx ,Nov 29, 2008 */ ...

  5. Java数字转汉字,数字转大写

    网上找了一圈,都不合我意,自己花点时间写了一下. 数字不好,逻辑差了点,性能应该还可以. 如果需要修改为转财务大写或转换为语音文件的,可以简单把汉字改一个就行. package com.lixor; ...

  6. java实现人民币数字转换中文大写的工具实例代码demo分享

    原文:java实现人民币数字转换中文大写的工具实例代码demo分享 http://www.zuidaima.com/share/1816208858221568.htm 刚好在项目里面用到了数字转化为 ...

  7. oracle、MySQL日期转XX年XX月XX日日期格式和金钱转中文大写数字的方法

    你知道的越多,你不知道的越多 点赞再看,养成习惯 如果您有疑问或者见解,欢迎指教: 企鹅:869192208 问题 工作中遇到一些项目需要打印文书,出具文书的日期,客户希望做成XX年XX月XX日的格式 ...

  8. java把小写变大写_用java实现人民币小写变大写的方法

    用java语言可以实现人民币小写转换为大写吗?如何实现呢?下面常见的用java实现人民币小写变大写的方法可以说是最精简的了,希望大家可以学习下. 这里介绍一个通过取余的办法来实现将人民币小写转换为大写 ...

  9. Java生成随机数字和字母组合10位数

    /**               * java生成随机数字和字母组合10位数               * @param length[生成随机数的长度]               * @ret ...

最新文章

  1. 来自lqqm的一些人生感悟,希望从中受益
  2. 你们是不是真的很缺大数据工程师?
  3. 怎么在代码中打开、关闭屏幕旋转
  4. Linq to sql和lambda
  5. 【框架篇】mvc、mvp、mvvm使用关系总结
  6. 7-8 数字三角形 (31 分)(思路+详解+动态规划)Come Baby!!!!!!!!!!!
  7. python高级-闭包-装饰器
  8. C# 程序集 和 反射
  9. 台积电一季度营收接近170亿美元 再创新高
  10. 设计师需要的素材网站,给你归纳好了,拿走!
  11. dmv io读写高的sql_使用内置的动态管理视图(DMV)发现更多SQL Server信息
  12. 2021年最棒的10款Java框架,你喜欢哪个?
  13. 2048小游戏微信小程序源码
  14. 《统计数据会说谎》阅读总结
  15. 软件开发的里程碑简单概念
  16. 计算机系统盘怎么扩充,c盘扩大,教您怎么把c盘扩大
  17. 搜狗android平板专用,搜狗推首款支持Android 3.0平板专用输入法
  18. Vulkan_Ray Tracing 01_API基础
  19. You must SET PASSWORD before executing this statement的解决方法 详细出处参考:http://www.jb51.net/article/39187.
  20. 直接在文件夹打开cmd

热门文章

  1. 静态时序分析—时序借用(Timing Borrow)
  2. 六、SQL Server数据库用户管理
  3. android contentprovider学习(遇到最满意的介绍)---阿冬专栏
  4. VIP邮箱有什么好处,北京外贸邮箱品牌原来这个最好用?
  5. python的api是什么意思_python中api的使用方法是什么
  6. uniapp微信公众号h5开发--(微信开发回调、背景音乐自动播放、微信朋友分享、微信扫一扫)一站式踩坑
  7. 数据库(mysql)数据的备份与还原
  8. 哈希的应用(2)——布隆过滤器
  9. 一文入门西门子MindSphere IOT平台
  10. 西门子串口通讯10-CP441-2在STEP7环境中做Modbus从站通讯