数字转金额大写方法

This commit is contained in:
jia 2023-12-29 18:02:48 +08:00
parent 72f9a4162e
commit b5de20a18c

View File

@ -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;
}
return result;
}