java开发_数字转换汉语中人民币的大写_完整版
转自: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开发_数字转换汉语中人民币的大写_完整版相关推荐
- java人民币大小写转换函数_java开发_数字转换汉语中人民币的大写_完整版
1 package com.b510.number2char;2 3 import java.math.BigDecimal;4 5 /**6 * 数字转换为汉语中人民币的大写 7 *8 * @aut ...
- java数组个数无限_基于Java代码实现数字在数组中出现次数超过一半
下文通过几种方法给大家介绍java数组数字出现次数,具体内容如下所示: 方法一: 数组排序,然后中间值肯定是要查找的值. 排序最小的时间复杂度(快速排序)O(NlogN),加上遍历. 方法二: 使用散 ...
- android Java开发设计模式及在android中的应用解析
android Java开发设计模式及在android中的应用解析 什么是设计模式: 可以用一句话概括设计模式---设计模式是一种利用OOP的封闭.继承和多态三大特性,同时在遵循单一职责原则.开闭原则 ...
- 用原生js把数字转换成货币人民币表示带逗号表示方法
用原生js把数字转换成货币人民币表示带逗号表示方法 function rmb(str){let strArr = String( parseFloat(str).toFixed(2) ).split( ...
- 将数字转换成中文金额的大写形式
package com.unteck.fms.web.businessdata.controller; import org.springframework.beans.factory.annotat ...
- python实战一个完整的项目-Python项目开发实战(第2版)高清晰PDF完整版+代码
会写代码≠能做好项目! 1.建立有序生产环境 2.迅速融入开发团队 3.高效处理项目问题 网罗Python项目开发中的流程,让你的编程事半功倍 Python项目与封装/团队开发环境/问题驱动开发/源码 ...
- JAVA浮点数转人民币读法_算法--java实现将数字转换成人民币大写(迅雷面试题)...
public classRmb {/*** 人民币的基本信息和操作 * *@authorsoyoungboy *@version1.0*/ private double number; //人民币的数 ...
- 小程序转换纯数字数字_低代码,快速的应用程序开发和数字转换
小程序转换纯数字数字 最近,许多低码/无码解决方案在企业中得到了发展,使非技术人员可以选择创建简单的应用程序. 分析人士预测,低码行业将以每年20%以上的速度增长. 但是什么是低码,为什么它如此流行, ...
- 低代码,快速应用开发和数字转换
最近,许多低码/无码解决方案在企业中得到了发展,从而使非技术人员可以选择创建简单的应用程序. 分析人士预测,低码行业将以每年20%以上的速度增长. 但是什么是低码,为什么它如此流行,它又有什么问题呢? ...
最新文章
- leetcode71
- C语言经典例79-字符串排序
- Linux配置防火墙,开启80端口、3306端口
- 数组中的奇数排在偶数组前面
- 逐点比较法直线插补MATLAB(四个象限合并)
- 2019-2020年目标跟踪论文汇总
- Gitbub远程仓库的访问
- 微信小程序中自定义select下拉选项框
- 概率论与数理统计大作业实验报告
- Android --- 5G网络,android系统开发教程
- java_web需要哪些技术
- 阿里云年中618钜惠都有哪些活动-详细的为你列举
- 从一个运维人员的角度看微盟的这次删库跑路的节奏
- window10 彻底关闭自动更新
- Zeus源码解读之定时任务执行与手动执行任务的过程分析
- Linux-环境变量配置
- SF14 | Supertrend“超级趋势线”指标魔改升级(源码)
- 软件测试周刊(第20期):恐惧,来自只思考却不行动
- ubuntu五笔死机
- 7-1 求两点之间距离