转自:https://www.cnblogs.com/hongten/p/hongten_java_money.html

做这个应用,源于突然的一个想法:看到发票上面的数字要转换成汉语中人民币的大写

于是就有了下面的这些事儿.....

先看看运行效果:

======================================================

代码部分

======================================================

  1 package com.b510.number2char;
  2
  3 import java.math.BigDecimal;
  4
  5 /**
  6  * 数字转换为汉语中人民币的大写<br>
  7  *
  8  * @author hongten
  9  * @contact hongtenzone@foxmail.com
 10  * @create 2013-08-13
 11  */
 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      * 金额的精度,默认值为2
 34      */
 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 numberOfMoney
 45      *            输入的金额
 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, or
 51         // 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, 11
 66         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开发_数字转换汉语中人民币的大写_完整版相关推荐

  1. java人民币大小写转换函数_java开发_数字转换汉语中人民币的大写_完整版

    1 package com.b510.number2char;2 3 import java.math.BigDecimal;4 5 /**6 * 数字转换为汉语中人民币的大写 7 *8 * @aut ...

  2. java数组个数无限_基于Java代码实现数字在数组中出现次数超过一半

    下文通过几种方法给大家介绍java数组数字出现次数,具体内容如下所示: 方法一: 数组排序,然后中间值肯定是要查找的值. 排序最小的时间复杂度(快速排序)O(NlogN),加上遍历. 方法二: 使用散 ...

  3. android Java开发设计模式及在android中的应用解析

    android Java开发设计模式及在android中的应用解析 什么是设计模式: 可以用一句话概括设计模式---设计模式是一种利用OOP的封闭.继承和多态三大特性,同时在遵循单一职责原则.开闭原则 ...

  4. 用原生js把数字转换成货币人民币表示带逗号表示方法

    用原生js把数字转换成货币人民币表示带逗号表示方法 function rmb(str){let strArr = String( parseFloat(str).toFixed(2) ).split( ...

  5. 将数字转换成中文金额的大写形式

    package com.unteck.fms.web.businessdata.controller; import org.springframework.beans.factory.annotat ...

  6. python实战一个完整的项目-Python项目开发实战(第2版)高清晰PDF完整版+代码

    会写代码≠能做好项目! 1.建立有序生产环境 2.迅速融入开发团队 3.高效处理项目问题 网罗Python项目开发中的流程,让你的编程事半功倍 Python项目与封装/团队开发环境/问题驱动开发/源码 ...

  7. JAVA浮点数转人民币读法_算法--java实现将数字转换成人民币大写(迅雷面试题)...

    public classRmb {/*** 人民币的基本信息和操作 * *@authorsoyoungboy *@version1.0*/ private double number; //人民币的数 ...

  8. 小程序转换纯数字数字_低代码,快速的应用程序开发和数字转换

    小程序转换纯数字数字 最近,许多低码/无码解决方案在企业中得到了发展,使非技术人员可以选择创建简单的应用程序. 分析人士预测,低码行业将以每年20%以上的速度增长. 但是什么是低码,为什么它如此流行, ...

  9. 低代码,快速应用开发和数字转换

    最近,许多低码/无码解决方案在企业中得到了发展,从而使非技术人员可以选择创建简单的应用程序. 分析人士预测,低码行业将以每年20%以上的速度增长. 但是什么是低码,为什么它如此流行,它又有什么问题呢? ...

最新文章

  1. leetcode71
  2. C语言经典例79-字符串排序
  3. Linux配置防火墙,开启80端口、3306端口
  4. 数组中的奇数排在偶数组前面
  5. 逐点比较法直线插补MATLAB(四个象限合并)
  6. 2019-2020年目标跟踪论文汇总
  7. Gitbub远程仓库的访问
  8. 微信小程序中自定义select下拉选项框
  9. 概率论与数理统计大作业实验报告
  10. Android --- 5G网络,android系统开发教程
  11. java_web需要哪些技术
  12. 阿里云年中618钜惠都有哪些活动-详细的为你列举
  13. 从一个运维人员的角度看微盟的这次删库跑路的节奏
  14. window10 彻底关闭自动更新
  15. Zeus源码解读之定时任务执行与手动执行任务的过程分析
  16. Linux-环境变量配置
  17. SF14 | Supertrend“超级趋势线”指标魔改升级(源码)
  18. 软件测试周刊(第20期):恐惧,来自只思考却不行动
  19. ubuntu五笔死机
  20. 7-1 求两点之间距离

热门文章

  1. whereis命令查看你要添加的软件在哪里
  2. 汇编中的DW:DW 定义一个字
  3. 查看LoadRunner脚本请求日志和服务器返回值方法
  4. 多线程环境中安全使用集合API(含代码)
  5. linux学习之shell基础篇
  6. arm linux 内核启动,Linux(ARM)内核启动地址
  7. 汇编语言笔记10-CALL和RET指令
  8. JSP 第一天:提交表单--获取表单中的数据值
  9. request获取网页单选框的值
  10. 计算机底层书籍三件套--大话计算机