数字转金额大写方法
This commit is contained in:
parent
72f9a4162e
commit
b5de20a18c
@ -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;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user