问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java如何将数字转为中文大写

发布网友 发布时间:2022-04-24 14:27

我来回答

1个回答

热心网友 时间:2023-09-03 19:18

import org.apache.commons.lang3.StringUtils;

/**
* @Title: ConvertUpMoney
* @Description: 将数字金额转换为大写中文金额
* @date: 2019年6月18日 下午10:52:27
*/
public class ConvertUpMoney {

// 大写数字
private static final String[] NUMBERS = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
// 整数部分的单位
private static final String[] IUNIT = {"元","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟","万","拾","佰","仟"};
// 小数部分的单位
private static final String[] DUNIT = {"角","分","厘"};

/**
* 转换为大写的中文金额
* @param str 字符串类型的 金额数字
* @return
*/
public static String toChinese(String str) {
// 判断输入的金额字符串是否符合要求
if (StringUtils.isBlank(str) || !str.matches("(-)?[\\d]*(.)?[\\d]*")) {
return "抱歉,请输入数字!";
}

if("0".equals(str) || "0.00".equals(str) || "0.0".equals(str)) {
return "零元";
}

// 判断金额数字中是否存在负号"-"
boolean flag = false;
if(str.startsWith("-")){
// 标志位,标志此金额数字为负数
flag = true;
str = str.replaceAll("-", "");
}

// 去掉金额数字中的逗号","
str = str.replaceAll(",", "");
String integerStr;//整数部分数字
String decimalStr;//小数部分数字

// 初始化:分离整数部分和小数部分
if(str.indexOf(".")>0) {
integerStr = str.substring(0,str.indexOf("."));
decimalStr = str.substring(str.indexOf(".") + 1);
}else if(str.indexOf(".")==0) {
integerStr = "";
decimalStr = str.substring(1);
}else {
integerStr = str;
decimalStr = "";
}

// beyond超出计算能力,直接返回
if(integerStr.length()>IUNIT.length) {
return "超出计算能力!";
}

// 整数部分数字
int[] integers = toIntArray(integerStr);
// 判断整数部分是否存在输入012的情况
if (integers.length>1 && integers[0] == 0) {
return "抱歉,输入数字不符合要求!";
}
// 设置万单位
boolean isWan = isWan5(integerStr);
// 小数部分数字
int[] decimals = toIntArray(decimalStr);
// 返回最终的大写金额
String result = getChineseInteger(integers, isWan) + getChineseDecimal(decimals);
if(flag){
// 如果是负数,加上"负"
return "负" + result;
}else{
return result;
}
}

/**
* 将字符串转为int数组
* @param number 数字
* @return
*/
private static int[] toIntArray(String number) {
int[] array = new int[number.length()];
for(int i = 0;i<number.length();i++) {
array[i] = Integer.parseInt(number.substring(i,i+1));
}
return array;
}

/**
* 将整数部分转为大写的金额
* @param integers 整数部分数字
* @param isWan 整数部分是否已经是达到【万】
* @return
*/
public static String getChineseInteger(int[] integers,boolean isWan) {
StringBuffer chineseInteger = new StringBuffer("");
int length = integers.length;
if (length == 1 && integers[0] == 0) {
return "";
}
for(int i=0; i<length; i++) {
String key = "";
if(integers[i] == 0) {
if((length - i) == 13)//万(亿)
key = IUNIT[4];
else if((length - i) == 9) {//亿
key = IUNIT[8];
}else if((length - i) == 5 && isWan) {//万
key = IUNIT[4];
}else if((length - i) == 1) {//元
key = IUNIT[0];
}
if((length - i)>1 && integers[i+1]!=0) {
key += NUMBERS[0];
}
}
chineseInteger.append(integers[i]==0?key:(NUMBERS[integers[i]]+IUNIT[length - i -1]));
}
return chineseInteger.toString();
}

/**
* 将小数部分转为大写的金额
* @param decimals 小数部分的数字
* @return
*/
private static String getChineseDecimal(int[] decimals) {
StringBuffer chineseDecimal = new StringBuffer("");
for(int i = 0;i<decimals.length;i++) {
if(i == 3) {
break;
}
chineseDecimal.append(decimals[i]==0?"":(NUMBERS[decimals[i]]+DUNIT[i]));
}
return chineseDecimal.toString();
}

/**
* 判断当前整数部分是否已经是达到【万】
* @param integerStr 整数部分数字
* @return
*/
private static boolean isWan5(String integerStr) {
int length = integerStr.length();
if(length > 4) {
String subInteger = "";
if(length > 8) {
subInteger = integerStr.substring(length- 8,length -4);
}else {
subInteger = integerStr.substring(0,length - 4);
}
return Integer.parseInt(subInteger) > 0;
}else {
return false;
}
}

// Test
public static void main(String[] args) {
String number = "12.56";
System.out.println(number+": "+ConvertUpMoney.toChinese(number));

number = "1234567890563886.123";
System.out.println(number+": "+ConvertUpMoney.toChinese(number));

number = "1600";
System.out.println(number+": "+ConvertUpMoney.toChinese(number));

number = "156,0";
System.out.println(number+": "+ConvertUpMoney.toChinese(number));

number = "-156,0";
System.out.println(number+": "+ConvertUpMoney.toChinese(number));

number = "0.12";
System.out.println(number+": "+ConvertUpMoney.toChinese(number));

number = "0.0";
System.out.println(number+": "+ConvertUpMoney.toChinese(number));

number = "01.12";
System.out.println(number+": "+ConvertUpMoney.toChinese(number));

number = "0125";
System.out.println(number+": "+ConvertUpMoney.toChinese(number));

number = "-0125";
System.out.println(number+": "+ConvertUpMoney.toChinese(number));

number = "sdw5655";
System.out.println(number+": "+ConvertUpMoney.toChinese(number));

System.out.println(null+": "+ConvertUpMoney.toChinese(null));
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
求狗狗不能吃的东东? 魔兽世界60级猎人带什么宝宝的问题 沈阳苹果手机售后维修点有哪些 沈阳哪里修理手机比较好一点 妈咪,胸口第三根肋骨骨折吃什么可以补。 胸口肋骨断掉最适宜的方法? ...不小心胸口摔着了,上周去医院查出左侧4 5肋骨骨折,当时医生只配了两... 有百度文库VIP账号的大神们可以帮我下载这个文档吗 百度文库免费下载ppt方法介绍-百度文库怎么免费下载ppt 初中英语翻译 在线等! 笔记本电脑开机黑屏只有鼠标箭头 笔记本黑屏,只有鼠标箭头显示,该如何回复? 索尼笔记本开机黑屏只有鼠标能动怎么办? 笔记本电脑开不了机,黑屏了,只有鼠标箭头,怎么办? 稽核会计工作职责 市场稽核专员是怎样的工作 请问台资企业的稽核岗位具体是做什么的。 企业的稽核会计岗位是做什么的呢? 财务稽核是做什么的? 医保局稽核事务部岗位职责风险 酒店的稽核主要工作职责是什么? 会计机构内部稽核工作的职责有哪些 保险公司的稽核岗位职责 稽核专员岗位职责有哪些 会计中的稽核是什么意思,干什么的 什么叫做稽核?和财务部有关的稽核部是做什么的呢? 请问:稽核专员是做什么的,主要的工作职责又是什么? bella luna 歌词的中文翻译 Bella diva中的Bella具体指谁? belbar niente中文翻译 如何用java语言把小写换成大写 java 数字转大写汉字 java中如何把大写字母转换成小写字母,小写字母转换成大写字母? java中小写转换为大写 java如何输入字串转化首字母大写 java中怎样把字符串小写转化为大写 怎样把一段java字符串中的字符的大写转为小写,小写转为大写 java中如何把大写字母转换成小写字母,小写字母转换成大写字母 java 将文件内容转换为大写字母显示 怎么用JAVA实现数字转换为大写 JAVA 数字转换为中文大写的转换 java大小写字母转化 A股为什么称为A股??? A股的介绍 怎么接本尼无线鼠标? 本尼g30鼠标的开关在哪?要怎么连接台式电脑 c语言中double是什么意思? beny本尼无线键盘怎么连接 本尼无线鼠标怎么使用,插了USB后没反应 在c语言double类型数据占多少字符 char类型数据占多少字节