将数字转换为中文(通常称为”中文数字读法”或”数字转汉字”)

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)) // 输出:一亿二千三百四十五万六千七百八十九