java将数字转换成大写_Java中金额数字转换为大写数字
注:该代码来自于别人,我引入进来并修改了里面的几个bug.现在写进我的博客里,以便于日后查看,和为其它博友们提供方便
修改bug地方:1.金额为0时,不加整。以前是零元整,现在是零元 2.修改"分", "角", "元","万", "亿","兆"位不会出现零
package com.zbx.bs.common.util;
import java.math.BigDecimal;
/**
* 数字转换为汉语中人民币的大写
*
* @author dean
*/
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 = "零元";
/**
* 把输入的金额转换为汉语中人民币的大写
*
* @param numberOfMoney
* 输入的金额
* @return 对应的汉语大写
*/
public static String number2CNMontrayUnit(BigDecimal numberOfMoney) {
StringBuffer sb = new StringBuffer();
// 返回-1:表示该数小于0 0:表示该数等于0 1:表示该数大于0
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, 11
if (!(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 (numIndex != 0 && numIndex != 1 && numIndex != 2
&& numIndex != 6 && numIndex != 10 && numIndex != 14) {
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);
}// 除了0.00其他数据都要带特殊字符:整
sb.append(CN_FULL);
return sb.toString();
}
public static void main(String[] args) {
double money = 8880044841.10;
BigDecimal numberOfMoney = new BigDecimal(money);
System.out.println("你输入的金额为:【" + money + "】 #--# [" + NumberToCN.number2CNMontrayUnit(numberOfMoney).toString() + "]");
}
}
java将数字转换成大写_Java中金额数字转换为大写数字相关推荐
- java将中文转换成拼音_java实现将汉语转换为拼音功能
这几天在做项目的时候用到了通过拼音去数据库表里面去模糊查询汉语字段,刚开始的时候感觉特别神奇,查了好多资料,直接去模糊查询是能实现的,但是貌似很复杂.所以最终取了一个比较容易的方案,就是给数据库表里面 ...
- html把数字转换成日期,表格中如何把数字改为日期 表格中打数字会变成日期是怎么回事?...
Excel 表格中如何把数字转换成时间? 如何在EXCEl中把数字变成日期格式 如何将EXCEL中的日期格式转换成数值型格式 学生出生年月原格式为1990-03-20现在想将它变成199003舍掉后面 ...
- 怎么把数字替换成空格_Excel中带单位后缀的数字如何计算?
在日常统计的Excel工作表中一般带了单位的数字是没办法直接进行计算的,需要进行一定的操作才可以转换成可以计算的模式.今天小编来给大家讲解一下具体的操作方法,快来和我一起学习一下吧! 工具/原料 电脑 ...
- java将字符转换成拼音_java中将汉字转换成拼音的实现代码
一:演示: 如在控制台输入:北京欢迎你 打印出来的拼音:bei jing huan ying ni 二:导入要依赖的jar: 汉字转换拼音jar下载 三:代码编写 代码如下: public stati ...
- java毫秒值转换成日期_Java学习笔记day08
Object类 java.lang.Object 类Object是类层次结构的根类 每个类都使用Object作为 超(父)类 所有对象(包括数组)都实现这个类的方法 Object类的toString方 ...
- java把汉字转换成拼音_Java实现汉字转换为拼音
本文的核心代码取自easydozer的blog:http://blog.csdn.net/easydozer/ 代码说明: Java实现汉字转换为拼音的GUI版本. GUI代码部分: /** * @( ...
- java date 转换成毫秒_Java程序将Date转换为毫秒
导入以下包以使用Date类.import java.util.Date; 否创建一个Date对象.Date d = new Date(); 让我们将当前日期转换为毫秒.d.getTime() 以下是一 ...
- java 日文全角转半角_java中全角转换为半角的方法
在获取文本的时候,经常遇到数据格式的问题,需要判断或转换. 本文旨在解决全角符号转换为半角符号的问题. 网上大体有两种方法:转换编码或者替换. 我使用的是转换编码,引用自:http://blog.cs ...
- java 将json转换成sql_SQL Server中将查询结果转换为Json格式脚本分享
脚本源码: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE[dbo].[SerializeJSON]( @Param ...
- 在EXCEL中金额小写转换为大写
在EXCEL中A1为数字格式单元格,在任意单元格内粘贴下面公式即可显示大定金额: IF(A1<=0,,TEXT(INT(A1),"[dbnum2]人民币G/通用格式")&am ...
最新文章
- 史上最全DSO学习资料
- 美国12大科技公司如何参与自动驾驶?
- MongoDB的下载与安装
- 大数据预测:成都、郑州等跻身春节十大“瘦身”城市
- 回溯法解整数的划分问题(C语言)
- P2327 [SCOI2005]扫雷
- 《大型数据库技术》MySQL数据库的开发基础
- 【转】JavaScript顶级对象参考模型
- Dynamics AX2012 Excel导入AX
- 计算混响时间的意义_混响时间的测量方法和步骤
- php对接打码平台,易语言接入打码平台的方法
- QQ概念版(WPF制作)
- java中常用的设计模式(*)
- Matlab资料汇总暨MATLAB中文论坛帖子整理(一)
- 机房管理制度(试行)
- exports is not defined
- Cuba Platform Introduce (Cuba平台介绍)
- 本周AI热点回顾:Hinton独立发布44页论文火爆社区;新特效火爆全网!各路神仙齐唱《蚂蚁呀嘿》...
- java 中“==”与“equal” 的区别
- 逻辑回归(神经网络Sigmod激活函数,计量logit模型)