数组的每千分位用逗号隔开|八月更文挑战

599 阅读1分钟

这是我参与8月更文挑战的第4天,活动详情查看: 8月更文挑战

没有小数

这种情况相对来说比较简单,我们先去判断长度是否为3,如果为3我们可以直接返回数字字符串,入如不为三我们开始求数组的余数,如果我们可以被三整除的说则说明我们当前需用考虑超出的部分,只需要三三等分再用都好隔开即可;如果我们当前数组不能被3整除,那我们将余数部分剔除,再将剩余部分三三等分使用逗号隔开。

注意正则表单时的使用,我们使用正则表达式将字符串三等分截取为数组在使用join将其转为格式化的字符串。

代码实现:

 // 没有小数时
  function ToLocalNum(num) {
    let str = num.toString();
    let len = str.length;
    if (len === 3) {
      return str
    } else {
      let yushu = len % 3
      if (yushu == 0) {
        return str.match(/\d{3}/g).join(',')
      } else {
        return str.slice(0, yushu) + ',' + str.slice(yushu, len).match(/\d{3}/g).join(',')
      }
    }
  }
  console.log(ToLocalNum(12312345678))

含小数

小数不需要我们进行过多的处理,只需要我们找到相应的小数部分,将其与我们之前的操作拼接起来就可以完成我们想要的效果了。

代码如下:

  let format = num => {
    let str = num.toString();
    let len = str.length;
    //小数点后的值
    let floatstr = ''
    // 判断是否一个整数
    let tartgetArr = ''
    let donum = num.indexOf('.');
    if (donum !== -1) {
      tartgetArr = str.slice(0, donum)
      floatstr = str.slice(donum, len)
    } else {
      tartgetArr = str.slice()
    }

    // 处理整数部分
    let tartlen = tartgetArr.length;
    if (tartlen == 3) {
      return tartgetArr + floatstr
    } else {
      if (tartlen % 3 === 0) {
        return tartgetArr.match(/\d{3}/g).join(',') + floatstr
      } else {
        return tartgetArr.slice(0,tartlen % 3)+','+tartgetArr.slice(tartlen % 3,tartlen).match(/\d{3}/g).join(',') + floatstr
      }
    }
  }

console.log(format('1231231.123'))