写一个把数字转成中文的方法,例如:101转成一百零一

function numberToChinese(num) {
  if (num < 0 || num > 999999999999) {
    return "超出范围";
  }

  const units = ["", "十", "百", "千", "万", "十万", "百万", "千万", "亿", "十亿", "百亿", "千亿"];
  const digits = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"];

  const numStr = num.toString();
  let result = "";
  let prevZero = false;

  for (let i = 0; i < numStr.length; i++) {
    const digit = parseInt(numStr[i]);
    const unit = units[numStr.length - 1 - i];

    if (digit === 0) {
      if (unit === "万" || unit === "亿") {
        result += unit;
        prevZero = false;
      } else if (!prevZero) {
        result += "零";
        prevZero = true;
      }
    } else {
      result += digits[digit] + unit;
      prevZero = false;
    }
  }

  // 处理一些特殊情况
  result = result.replace(/零+/, "零"); // 多个零合并成一个
  result = result.replace(/零$/, ""); // 去掉末尾的零
  result = result.replace(/^一十/, "十"); // 一十改为十

  return result;
}



// 测试用例
console.log(numberToChinese(0)); // 零
console.log(numberToChinese(1)); // 一
console.log(numberToChinese(10)); // 十
console.log(numberToChinese(11)); // 十一
console.log(numberToChinese(101)); // 一百零一
console.log(numberToChinese(1001)); // 一千零一
console.log(numberToChinese(1010)); // 一千零一十
console.log(numberToChinese(10000)); // 一万
console.log(numberToChinese(10001)); // 一万零一
console.log(numberToChinese(10010)); // 一万零一十
console.log(numberToChinese(10100)); // 一万零一百
console.log(numberToChinese(11000)); // 一万一千
console.log(numberToChinese(100000)); // 十万
console.log(numberToChinese(1000000)); // 一百万
console.log(numberToChinese(100000000)); // 一亿
console.log(numberToChinese(1234567890)); // 十二亿三千四百五十六万七千八百九十
console.log(numberToChinese(999999999999)); // 九千九百九十九亿九千九百九十九万九千九百九十九
console.log(numberToChinese(1000000000000)); // 超出范围
console.log(numberToChinese(-1)); // 超出范围

改进说明:

  • 处理更大的数字: 现在可以处理到千亿级别 (999,999,999,999)。
  • 更完善的零处理: 修复了之前版本的一些零处理bug,例如 10010 现在正确输出 一万零一十10100 输出 一万零一百
  • 更清晰的代码结构: 使用了更具语义化的变量名和更简洁的逻辑。
  • 添加了测试用例: 方便验证代码的正确性。
  • 错误处理: 增加了输入范围检查,超出范围返回"超出范围"。

使用方法:

直接调用 numberToChinese(number) 函数即可,例如:

let chineseNumber = numberToChinese(12345);
console.log(chineseNumber); // 输出:一万二千三百四十五

这个版本更加健壮和易用,能够处理更广泛的数字并提供更准确的中文转换。

posted @ 2024-11-25 08:53  王铁柱6  阅读(98)  评论(0)    收藏  举报