数字转金额大写方法
This commit is contained in:
parent
72f9a4162e
commit
b5de20a18c
@ -165,46 +165,60 @@ export const getNonDuplicateID = (length = 8) => {
|
|||||||
* 将数字转成中文大写
|
* 将数字转成中文大写
|
||||||
* @params num
|
* @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 = '';
|
let result = '';
|
||||||
|
|
||||||
// 处理整数部分
|
// 转换整数部分
|
||||||
if (integerPart === 0) {
|
if (integerPart === 0) {
|
||||||
result += chineseNumbers[0];
|
result = chineseChars[0] + chineseCurrencies[0];
|
||||||
} else {
|
} else {
|
||||||
let integerPartStr = integerPart.toString();
|
result = convertPart(integerPart) + chineseCurrencies[0];
|
||||||
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];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 处理小数部分
|
// 转换小数部分
|
||||||
if (decimalPart > 0) {
|
if (decimalPart > 0) {
|
||||||
result += '点';
|
result += convertPart(Math.floor(decimalPart / 10)) + chineseCurrencies[1];
|
||||||
result += chineseNumbers[decimalPart / 10] + chineseNumbers[decimalPart % 10];
|
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