package org.moreyou.modules.api.util;
import java.math.BigDecimal;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class NumberToChinese {
private static final String[] CN_NUMS = new String[] {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
private static final String[] CN_INT_RADICE = new String[] {"", "拾", "佰", "仟"};
private static final String[] CN_INT_UNITS = new String[] {"", "万", "亿", "兆"};
private static final String[] CN_DEC_UNITS = new String[] {"角", "分", "毫", "厘"};
private static final String CN_INTEGER = "整";
private static final String CN_INT_LAST = "元";
public static String convertToChinese(BigDecimal money) {
StringBuilder ChineseStr = new StringBuilder(); // 输出的中文金额字符串
if (money.compareTo(BigDecimal.ZERO) == 0) {
return CN_NUMS[0] + CN_INT_LAST + CN_INTEGER;
}
if (money.compareTo(BigDecimal.valueOf(999999999999999.9999)) >= 0) {
throw new IllegalArgumentException("超出最大处理数字");
}
if (money.compareTo(BigDecimal.ZERO) < 0) {
ChineseStr.append("负");
money = money.abs();
}
String moneyStr = money.setScale(4, BigDecimal.ROUND_HALF_UP).toPlainString();
String[] parts = moneyStr.split("\\.");
//处理整数部分
String IntegerNum = parts[0];
int IntLen = IntegerNum.length();
int zeroCount = 0;
for (int i = 0; i < IntLen; i++) {
int n = Integer.parseInt(String.valueOf(IntegerNum.charAt(i)));
int p = IntLen - i - 1;
int q = p / 4;
int m = p % 4;
if (n == 0) {
zeroCount++;
} else {
if (zeroCount > 0) {
ChineseStr.append(CN_NUMS[0]);
}
zeroCount = 0;
ChineseStr.append(CN_NUMS[n]).append(CN_INT_RADICE[m]);
}
if (m == 0 && zeroCount < 4) {
ChineseStr.append(CN_INT_UNITS[q]);
}
}
ChineseStr.append(CN_INT_LAST);
//处理小数部分
if (parts.length > 1) {
String DecimalNum = parts[1];
int decLen = DecimalNum.length();
for (int i = 0; i < decLen; i++) {
int n = Integer.parseInt(String.valueOf(DecimalNum.charAt(i)));
if (n != 0) {
ChineseStr.append(CN_NUMS[n]).append(CN_DEC_UNITS[i]);
}
}
if (ChineseStr.length() == 0) {
ChineseStr.append(CN_NUMS[0]).append(CN_INT_LAST).append(CN_INTEGER);
}
} else {
ChineseStr.append(CN_INTEGER);
}
return ChineseStr.toString();
}
public static void main(String[] args) {
BigDecimal amount = new BigDecimal("14666.6648");
System.out.println(convertToChinese(amount)); // 壹万贰仟叁佰肆拾伍元陆角柒分
}
}
数字金额转成中文金额的工具类
最新推荐文章于 2024-07-13 13:55:40 发布