|
|
@@ -1,56 +1,36 @@
|
|
|
-export function arabicToChinese(num) {
|
|
|
- const units = [
|
|
|
- "",
|
|
|
- "十",
|
|
|
- "百",
|
|
|
- "千",
|
|
|
- "万",
|
|
|
- "十万",
|
|
|
- "百万",
|
|
|
- "千万",
|
|
|
- "亿",
|
|
|
- "十亿",
|
|
|
- "百亿",
|
|
|
- "千亿",
|
|
|
- "万亿",
|
|
|
- "十万亿",
|
|
|
- "百万亿",
|
|
|
- "千万亿",
|
|
|
- ];
|
|
|
- const digits = ["", "一", "二", "三", "四", "五", "六", "七", "八", "九"];
|
|
|
- const tenDigits = [
|
|
|
- "十",
|
|
|
- "二十",
|
|
|
- "三十",
|
|
|
- "四十",
|
|
|
- "五十",
|
|
|
- "六十",
|
|
|
- "七十",
|
|
|
- "八十",
|
|
|
- "九十",
|
|
|
- ];
|
|
|
+export function arabicToChinese(value) {
|
|
|
+ const digitMap = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
|
|
|
+ const unitMap = ['', '十', '百', '千', '万', '亿'];
|
|
|
+ let chineseNumber = '';
|
|
|
+ let digits = value.toString().split('');
|
|
|
+ let hasZero = false;
|
|
|
+ let lastUnit = '';
|
|
|
|
|
|
- if (num === 0) {
|
|
|
- return "零";
|
|
|
- }
|
|
|
+ for (let i = digits.length - 1; i >= 0; i--) {
|
|
|
+ let digit = digits[i];
|
|
|
+ let unit = unitMap[digits.length - i - 1];
|
|
|
|
|
|
- let result = "";
|
|
|
- let unitIndex = 0;
|
|
|
- if (num == 10) {
|
|
|
- return "十";
|
|
|
+ if (digit === '0') {
|
|
|
+ if ((unit === '十' || unit === '百') && i > 0 && digits[i - 1] !== '0') {
|
|
|
+ // 如果是十位或百位上的零,并且后面跟着非零数字,则保留零
|
|
|
+ chineseNumber = digitMap[digit] + chineseNumber;
|
|
|
+ }
|
|
|
+ hasZero = true;
|
|
|
+ } else {
|
|
|
+ chineseNumber = digitMap[digit] + unit + chineseNumber;
|
|
|
+ if (unit === '十' && hasZero && lastUnit === '百') {
|
|
|
+ // 如果是十位并且之前有零,并且上一个单位是“百”,则在十位后插入零
|
|
|
+ chineseNumber = '零' + chineseNumber;
|
|
|
+ }
|
|
|
+ hasZero = false;
|
|
|
+ }
|
|
|
+ lastUnit = unit;
|
|
|
}
|
|
|
- while (num > 0) {
|
|
|
- const digit = num % 10;
|
|
|
- const isTenDigit =
|
|
|
- unitIndex > 0 && digit === 1 && result.length > 0 && result[0] !== "零";
|
|
|
- const unit = isTenDigit ? tenDigits[unitIndex - 1] : units[unitIndex];
|
|
|
- const digitChinese = digit === 1 && isTenDigit ? "" : digits[digit];
|
|
|
-
|
|
|
- result = digitChinese + unit + result;
|
|
|
|
|
|
- num = Math.floor(num / 10);
|
|
|
- unitIndex++;
|
|
|
- }
|
|
|
+ // 去除开头的“零”
|
|
|
+ chineseNumber = chineseNumber.replace(/^零+/, '');
|
|
|
|
|
|
- return result;
|
|
|
+ return chineseNumber || '零';
|
|
|
}
|
|
|
+
|
|
|
+
|