diff --git a/arap/src/private/nc/bs/pub/action/N_F3_SAVE.java b/arap/src/private/nc/bs/pub/action/N_F3_SAVE.java index a4bb0a3..a2ff377 100644 --- a/arap/src/private/nc/bs/pub/action/N_F3_SAVE.java +++ b/arap/src/private/nc/bs/pub/action/N_F3_SAVE.java @@ -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); + } + } + } }