将数字转换为中文(通常称为”中文数字读法”或”数字转汉字”)
function numberToChinese(num) {
const chars = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"]
const units = ["", "十", "百", "千"]
const bigUnits = ["", "万", "亿"]
const numStr = num
.toString()
.replace(/(?=(\d{4})+$)/g, ",")
.split(",")
.filter(Boolean)
function handle0(s) {
// 处理连续的0,和末尾的0
return s.replace(/零{2,}/g, "零").replace(/零+$/g, "")
}
function transform(s) {
if (s === "0000") return chars[0]
let result = ""
for (let i = 0; i < s.length; i++) {
const char = chars[Number(s[i])]
let unit = units[s.length - 1 - i]
if (char === chars[0]) unit = ""
result += char + unit
}
result = handle0(result)
return result
}
transform("1200")
let result = ""
for (let i = 0; i < numStr.length; i++) {
const part = transform(numStr[i])
let bigUnit = bigUnits[numStr.length - 1 - i]
if (part === chars[0]) bigUnit = ""
result += part + bigUnit
}
result = handle0(result)
return result
}
numberToChinese(123400001234)
// 测试示例
console.log(numberToChinese(0)) // 输出:零
console.log(numberToChinese(10)) // 输出:十
console.log(numberToChinese(20)) // 输出:二十
console.log(numberToChinese(110)) // 输出:一百一十
console.log(numberToChinese(1001)) // 输出:一千零一
console.log(numberToChinese(1000010)) // 输出:一百万零一十
console.log(numberToChinese(123456789)) // 输出:一亿二千三百四十五万六千七百八十九