大写金额赋值优化

This commit is contained in:
lihao 2025-06-19 10:40:29 +08:00
parent 485f13a907
commit f32edfc7da
1 changed files with 35 additions and 8 deletions

View File

@ -128,9 +128,6 @@ public class N_F3_SAVE extends N_BASE_ACTION {
private static final String ZERO_YUAN = "零元整";
public static String toChineseAmount(BigDecimal number) {
// if (number == null || number.compareTo(BigDecimal.ZERO) < 0) {
// throw new IllegalArgumentException("请输入非负数字");
// }
boolean isNegative = number.compareTo(BigDecimal.ZERO) < 0;
if (isNegative) {
number = number.abs(); // 转为正数
@ -149,6 +146,8 @@ public class N_F3_SAVE extends N_BASE_ACTION {
} else {
char[] intChars = integerPart.toCharArray();
int len = intChars.length;
int zeroCount = 0; // 记录连续的零的个数
for (int i = 0; i < len; i++) {
int digit = intChars[i] - '0';
int digitPosition = len - i - 1;
@ -156,18 +155,33 @@ public class N_F3_SAVE extends N_BASE_ACTION {
int positionInSection = digitPosition % 4;
if (digit != 0) {
// 如果前面有连续的零添加一个零
if (zeroCount > 0) {
chineseInteger.append(CHINESE_CHARS[0]);
zeroCount = 0;
}
chineseInteger.append(CHINESE_CHARS[digit]);
if (positionInSection > 0) {
chineseInteger.append(DIGIT_UNITS[positionInSection]);
}
}
if (positionInSection == 0) {
if (digit != 0 || chineseInteger.length() == 0) {
// 每四位添加一个大数单位
if (positionInSection == 0) {
chineseInteger.append(LARGE_NUMBERS[section]);
}
} else {
zeroCount++;
// 每四位的末尾即使是零也要添加大数单位
if (positionInSection == 0 && zeroCount < 4) {
chineseInteger.append(LARGE_NUMBERS[section]);
}
}
if (digit == 0) {
chineseInteger.append(CHINESE_CHARS[digit]);
// 每四位的末尾重置零计数
if (positionInSection == 0) {
zeroCount = 0;
}
}
// 移除多余的零和重复的单位
@ -214,6 +228,11 @@ public class N_F3_SAVE extends N_BASE_ACTION {
return ZERO_YUAN;
}
// 添加负号如果需要
if (isNegative) {
return "" + chineseInteger.toString();
}
return chineseInteger.toString();
}
@ -242,6 +261,14 @@ public class N_F3_SAVE extends N_BASE_ACTION {
}
}
}
// 移除连续的大数单位
for (String largeNum : LARGE_NUMBERS) {
if (!largeNum.isEmpty()) {
while (sb.indexOf(largeNum + largeNum) != -1) {
sb.replace(sb.indexOf(largeNum + largeNum), sb.indexOf(largeNum + largeNum) + largeNum.length() * 2, largeNum);
}
}
}
}