Skip to content

数字转中文

js
function toChineseNumber(num) {
  const chars = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"];
  const units = [
    "",
    "十",
    "百",
    "千",
    "万",
    "十",
    "百",
    "千",
    "亿",
    "十",
    "百",
    "千",
    "万",
    "十",
    "百",
    "千",
    "亿",
  ];
  // 去除中间段和末尾的连续‘零’
  function dropZero(str) {
    return str.replace(/{2,}/g, "零").replace(/+$/g, "");
  }
  function _transform(n) {
    if (n.replaceAll("0", "") === "") return chars[0];
    let result = "";
    for (let i = 0; i < n.length; i++) {
      const c = chars[+n[i]];
      const u = units[n.length - 1 - i];
      result += c + (c === chars[0] ? "" : u);
    }
    return dropZero(result);
  }

  const numStr = num.toString().split(",").filter(Boolean);

  return numStr.reduce((prev, cur) => {
    return (prev += _transform(cur));
  }, "");
}
console.log(toChineseNumber(34530003430));