private String numberConvertUppercase(String data) {
if (StringUtils.isEmpty(data)) {
return null;
}
StringBuilder result = new StringBuilder();
String zero = "零";
String negativeNumber = "负";
String intact = "整";
String[] uppercaseUnits = {"仟","佰","拾","兆","仟","佰","拾","亿","仟","佰","拾","万","仟","佰","拾","元","角","分"};
String[] uppercaseNumber = {"壹","贰","叁","肆","伍","陆","柒","捌","玖"};
BigDecimal dataNum = new BigDecimal(data).setScale(2, BigDecimal.ROUND_DOWN);
if (dataNum.signum() == 0) {
return "零元整";
}
data = dataNum.toPlainString();
//将数字拆分成整数部分和小数部分
String[] dataSplit= data.split("\\.");
//1.转换整数部分
char[] integerModule = dataSplit[0].toCharArray();
int integerSubscript;
if (integerModule[0] == '-') {
integerSubscript = uppercaseUnits.length - 2 - integerModule.length + 1;
} else {
integerSubscript = uppercaseUnits.length - 2 - integerModule.length;
}
boolean isShowZero = true; //如果是连续多个零,不需要每个零都转换
boolean isEndWithZero = false; //记录最后一位是零
for (int i = 0; i < integerModule.length; i++) {
if ('-' == integerModule[i] && i == 0) {
result.append(negativeNumber);
continue;
}
if (0 != Integer.valueOf(String.valueOf(integerModule[i]))) {
result.append(uppercaseNumber[Integer.valueOf(String.valueOf(integerModule[i])) - 1]).append(uppercaseUnits[integerSubscript]);
isShowZero = true;
isEndWithZero = false;
} else {
if ((integerModule[i] == '0') && (integerSubscript == 3 || integerSubscript == 7 || integerSubscript == 11)) {
if ((result.substring(result.length() - 1, result.length()).equals(zero))) {
if (integerSubscript == 3 || (integerSubscript == 7 && !result.toString().contains(uppercaseUnits[3])) || (integerSubscript == 11 && !result.toString().contains(uppercaseUnits[7]) && !result.toString().contains(uppercaseUnits[3]))) {
result.insert(result.length() - 1, uppercaseUnits[integerSubscript]);
}
} else {
result.append(uppercaseUnits[integerSubscript]);
}
}
if (isShowZero) {
result.append(zero);
isShowZero = false;
isEndWithZero = true;
}
}
++integerSubscript;
}
//如果最后一位是零,需要替换成"元"
if (isEndWithZero) {
result.replace(result.length() - 1, result.length(), uppercaseUnits[uppercaseUnits.length - 3]);
}
//2.处理小数部分
char[] decimalModule = dataSplit[1].toCharArray();
boolean isAllZero = true;
for (char c : decimalModule) {
if (c != '0') {
isAllZero = false;
break;
}
}
if (isAllZero) {
result.append(intact);
} else {
if (decimalModule[0] != '0') {
result.append(uppercaseNumber[Integer.valueOf(String.valueOf(decimalModule[0])) - 1]).append(uppercaseUnits[uppercaseUnits.length - 2]);
} else {
result.append(zero);
}
if (decimalModule[1] != '0') {
result.append(uppercaseNumber[Integer.valueOf(String.valueOf(decimalModule[1])) - 1]).append(uppercaseUnits[uppercaseUnits.length - 1]);
}
}
return result.toString();
}
金额数字转换成大写
最新推荐文章于 2023-06-01 18:17:07 发布