function moneyNumToChinese(money, decimal = 4) {
if (!money) {
return "";
}
const cnNums = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"];
const cnIntRadice = ["", "拾", "佰", "仟"];
const cnIntUnits = ["", "万", "亿", "兆"];
const cnDecUnits = ["角", "分", "厘", "毫", '丝', '忽'];
const cnInteger = "整";
const cnIntLast = "元";
const maxNum = 999999999999999.9999;
money = parseFloat(money);
if (money > maxNum || money < -maxNum) {
return "超出最大处理数字";
}
let chineseStr = "";
let parts;
let pmSymbol = "";
if (money === 0) {
chineseStr = cnNums[0] + cnIntLast + cnInteger;
return chineseStr;
}
if (money < 0) {
money = -money;
pmSymbol = "负 ";
}
money = money.toString();
if (money.indexOf(".") === -1) {
parts = [money, ''];
} else {
parts = money.split(".");
parts[1] = parts[1].substr(0, decimal);
}
const integerNum = parts[0];
const decimalNum = parts[1];
// 处理整数部分
if (parseInt(integerNum, 10) > 0) {
let zeroCount = 0;
const IntLen = integerNum.length;
for (let i = 0; i < IntLen; i++) {
const n = integerNum[i];
const p = IntLen - i - 1;
const q = Math.floor(p / 4);
const m = p % 4;
if (n === "0") {
zeroCount++;
} else {
if (zeroCount > 0) {
chineseStr += cnNums[0];
}
zeroCount = 0;
chineseStr += cnNums[parseInt(n)] + cnIntRadice[m];
}
if (m === 0 && zeroCount < 4) {
chineseStr += cnIntUnits[q];
}
}
chineseStr += cnIntLast;
}
// 处理小数部分
if (decimalNum !== '') {
const decLen = decimalNum.length;
console.log('decLen: ', decLen);
for (let i = 0; i < decLen; i++) {
const n = decimalNum[i];
if (n !== '0') {
chineseStr += cnNums[Number(n)] + cnDecUnits[i];
}
}
}
// 处理特殊情况
if (chineseStr === '') {
chineseStr += cnNums[0] + cnIntLast + cnInteger;
} else if (decimalNum === '') {
chineseStr += cnInteger;
}
chineseStr = pmSymbol + chineseStr;
return chineseStr;
}