数字转中文
javascript
/**
* 数字转中文
* @param {number} num 万亿以下的正整数
*/
function toChineseNumber(num) {
const strs = num
.toString()
.replace(/(?=(\d{4})+$)/g, ",")
.split(",")
.filter(Boolean);
const chars = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"];
const units = ["", "十", "百", "千"];
const bigUnits = ["", "万", "亿"];
function _transform(numStr) {
let result = "";
for (let i = 0; i < numStr.length; i++) {
const digit = +numStr[i];
const c = chars[digit];
const u = units[numStr.length - 1 - i];
if (digit === 0) {
if (result[result.length - 1] !== chars[0]) {
result += c;
}
} else {
result += c + u;
}
}
if (result[result.length - 1] === chars[0]) {
result = result.slice(0, -1);
}
return result;
}
let result = "";
for (let i = 0; i < strs.length; i++) {
const part = strs[i];
const c = _transform(part);
const u = c ? bigUnits[strs.length - i - 1] : "";
result += c + u;
}
return result;
}
function toChineseBigNumber(num) {
const str = toChineseNumber(num);
const map = {
零: "零",
一: "壹",
二: "贰",
三: "叁",
四: "肆",
五: "伍",
六: "陆",
七: "柒",
八: "捌",
九: "玖",
十: "拾",
百: "佰",
千: "仟",
万: "萬",
亿: "亿",
};
return str
.split("")
.map((s) => map[s])
.join("");
}
console.log(toChineseNumber(1234001234)); // 一十二亿三千四百万一千二百三十四