JS函数实现数字转中文大写


项目中,JS将万亿以下正整数转为中文大写

1. 数字转字符,分割,去除空字符

function toChineseNumber(num){
    const strs = num.toString().replace(/(?=(\d{4})+$)/g, ",")
        .split(",").filter(Boolean);
    console.log(strs);
}
toChineseNumber(41231234);

在这里插入图片描述

2. 遍历分割字符,替换为中文

function toChineseNumber(num){
        const strs = num.toString().replace(/(?=(\d{4})+$)/g, ",")
            .split(",").filter(Boolean);

        const chinese = ['零','壹','贰','叁','肆','伍','陆','柒','捌','玖']
        const unit = ['','拾','佰','仟']
        //处理四位数
        function _transform(numStr){
            let result = '';
            for (let i = 0; i < numStr.length; i++) {
                const digit = chinese[numStr[i]];

                console.log(digit);
            }
        }

        for (let i = 0; i < strs.length; i++) {
            const part = strs[i];
            _transform(part);
        }
        console.log(strs);
    }
    toChineseNumber(41231234);

在这里插入图片描述

3. 增加四位数单位

//处理四位数
function _transform(numStr){
    let result = '';
    for (let i = 0; i < numStr.length; i++) {
        const digit = chinese[numStr[i]];
        const c = unit[numStr.length - 1 - i];
        result += digit + c;
    }
    console.log(result);
}

在这里插入图片描述

4. 处理零

//处理四位数
function _transform(numStr){
    let result = '';
    for (let i = 0; i < numStr.length; i++) {
        const digit = chinese[numStr[i]];
        const c = unit[numStr.length - 1 - i];
        if(digit === '零'){
            if(result[result.length-1] !== chinese[0]){
                result += digit;
            }

        }else{
            result += digit + c;
        }
    }
    //去除末尾的零
    if(result[result.length-1] === chinese[0]){
        result = result.slice(0, -1);
    }
    console.log(result);
}

在这里插入图片描述

5. 拼接四位数据和单位

function toChineseNumber(num){
  const strs = num.toString().replace(/(?=(\d{4})+$)/g, ",")
      .split(",").filter(Boolean);

  const chinese = ['零','壹','贰','叁','肆','伍','陆','柒','捌','玖']
  const unit = ['','拾','佰','仟']
  //处理四位数
  function _transform(numStr){
      let result = '';
      for (let i = 0; i < numStr.length; i++) {
          const digit = chinese[numStr[i]];
          const c = unit[numStr.length - 1 - i];
          if(digit === '零'){
              if(result[result.length-1] !== chinese[0]){
                  result += digit;
              }

          }else{
              result += digit + c;
          }
      }
      //去除末尾的零
      if(result[result.length-1] === chinese[0]){
          result = result.slice(0, -1);
      }
      return result;
      //console.log(result);
  }
  let res = "";
  const bigUnit = ['','万','亿'];
  for (let i = 0; i < strs.length; i++) {
      const part = strs[i];
      //处理中间四位都是零的情况
      res += _transform(part) ? _transform(part) + bigUnit[strs.length - i - 1] : _transform(part);
  }
  console.log(res);
  console.log(strs);
}
toChineseNumber(402000000340);

在这里插入图片描述

  • 15
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值