From b5de20a18ceb9b2dfaa7e2563e1251a0f68704ba Mon Sep 17 00:00:00 2001 From: jia <1451658316@qq.com> Date: Fri, 29 Dec 2023 18:02:48 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E5=AD=97=E8=BD=AC=E9=87=91=E9=A2=9D?= =?UTF-8?q?=E5=A4=A7=E5=86=99=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/util.ts | 78 ++++++++++++++++++++++++++++------------------- 1 file changed, 46 insertions(+), 32 deletions(-) diff --git a/src/utils/util.ts b/src/utils/util.ts index 7db144f..398d462 100644 --- a/src/utils/util.ts +++ b/src/utils/util.ts @@ -165,46 +165,60 @@ export const getNonDuplicateID = (length = 8) => { * 将数字转成中文大写 * @params num */ -export const toChinesNum = (value: any) => { - const chineseNumbers = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']; - const chineseUnits = ['', '拾', '佰', '仟', '万', '亿']; - let integerPart = Math.floor(value); - let decimalPart = Math.round((value - integerPart) * 100); + + export const toChinesNum = (value: any) => { + + const chineseChars = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']; + const chineseUnits = ['', '拾', '佰', '仟', '万', '亿']; + const chineseCurrencies = ['元', '角', '分']; + + const integerPart = Math.floor(value); + const decimalPart = Math.round((value - integerPart) * 100); + + const convertPart = (num: number): string => { + if (num === 0) { + return ''; + } + + let partStr = ''; + let hasZero = false; + let unitIndex = 0; + + while (num > 0) { + const digit = num % 10; + if (digit !== 0) { + partStr = chineseChars[digit] + chineseUnits[unitIndex] + partStr; + hasZero = false; + } else { + if (!hasZero && unitIndex !== 0) { + partStr = chineseChars[0] + partStr; + hasZero = true; + } + } + num = Math.floor(num / 10); + unitIndex++; + } + + return partStr; + }; let result = ''; - // 处理整数部分 + // 转换整数部分 if (integerPart === 0) { - result += chineseNumbers[0]; + result = chineseChars[0] + chineseCurrencies[0]; } else { - let integerPartStr = integerPart.toString(); - let len = integerPartStr.length; - let zeroFlag = false; // 是否需要添加零 - - for (let i = 0; i < len; i++) { - let num = parseInt(integerPartStr[i]); - let unit = len - i - 1; - - if (num === 0) { - zeroFlag = true; - } else { - if (zeroFlag) { - result += chineseNumbers[0]; - zeroFlag = false; - } - result += chineseNumbers[num] + chineseUnits[unit]; - } - } + result = convertPart(integerPart) + chineseCurrencies[0]; } - // 处理小数部分 + // 转换小数部分 if (decimalPart > 0) { - result += '点'; - result += chineseNumbers[decimalPart / 10] + chineseNumbers[decimalPart % 10]; + result += convertPart(Math.floor(decimalPart / 10)) + chineseCurrencies[1]; + result += convertPart(decimalPart % 10) + chineseCurrencies[2]; + } else { + result += chineseChars[0] + chineseCurrencies[1] + chineseChars[0] + chineseCurrencies[2]; } - - - return result; - } \ No newline at end of file + return result; + } \ No newline at end of file