【JS】阿拉伯数字转成中文数字(包括亿单位长数字)

文章目录

  • 封装转换函数:
function numberToChinese(num) {
  const chineseNums = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
  const chineseUnits = ['', '十', '百', '千', '万', '十万', '百万', '千万', '亿'];
  if (num === 0) {
    return chineseNums[0];
  }
  let chineseStr = '';
  let unitIndex = 0;

  while (num > 0) {
    if (unitIndex > 8) {
      const start = chineseNums.indexOf(chineseStr[0]);
      const end = chineseStr.slice(1, -1);
      // 十亿以上 改为 数字输出
      chineseStr = `${num}${start}${end}`;
      break;
    }
    // 获取余数
    const remainder = num % 10;
    // 如果 num 不能被 10 整除
    if (remainder) {
      if (unitIndex === 1 && num < 10) {
        // 一十一 转换为 十一
        chineseStr = chineseUnits[unitIndex] + chineseStr;
      } else {
        console.log(chineseNums[remainder], chineseUnits[unitIndex], chineseStr);
        if (chineseStr.includes('万')) {
          // 优化万级别的显示
          chineseStr = chineseNums[remainder] + chineseUnits[unitIndex].replace('万', '') + chineseStr;
        } else {
          chineseStr = chineseNums[remainder] + chineseUnits[unitIndex] + chineseStr;
        }
      }
    } else {
      // 加零
      chineseStr = chineseNums[remainder] + chineseStr;
    }
    // 去除末尾的 零
    if (chineseStr.charAt(chineseStr.length - 1) === chineseNums[0]) {
      chineseStr = chineseStr.slice(0, -2);
    }
    // 去重中间重复的 零
    chineseStr = chineseStr.replace('零零', '零');
    // num 除 10,向下取整
    num = Math.floor(num / 10);
    // 位数进 1
    unitIndex += 1;
  }
  return chineseStr;
}
  • 使用案例:
console.log(numberToChinese(0));	// 零
console.log(numberToChinese(9));	// 九
console.log(numberToChinese(11));	// 十一
console.log(numberToChinese(498827030));	// 四亿九千八百八十二万七千零三十
console.log(numberToChinese(220830734));	// 二亿二千零八十三万零七百三十四
console.log(numberToChinese(33320001111));	// 333亿二千万零一千一百一十
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一颗不甘坠落的流星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值