封装千分位的两种方法

第一种

   formatNumber = num => {
        if (isNaN(num)) {
            throw new TypeError("num is not a number");
        }

        var groups = (/([\-\+]?)(\d*)(\.\d+)?/g).exec("" + num),
            mask = groups[1],            //符号位 
            integers = (groups[2] || "").split(""), //整数部分 
            decimal = groups[3] || "",       //小数部分 
            remain = integers.length % 3;
    
        var temp = integers.reduce(function (previousValue, currentValue, index) {
            if (index + 1 === remain || (index + 1 - remain) % 3 === 0) {
                return previousValue + currentValue + ",";
            } else {
                return previousValue + currentValue;
            }
        }, "").replace(/\,$/g, "");
        return mask + temp + decimal;
    }

第二种

formatAmount = (text, prec=2) => {
    //需要排除空字符串、null,但是要包含数字0
    if (!(!text && typeof (text) != 'undefined' && text != 0) && String(text) && !isNaN(Number(text))) {
      // if(!isNaN(Number(text))){
      //   if (String(text)) {
      let val;
      let number = text;
      let newNumber = number;
      let pointLength;
      let s = '';
      let numberArr = newNumber.toString().split('.');

      if (numberArr.length > 1) {
        pointLength = numberArr[1].length;
      } else {
        pointLength = 0;
      }

      number = (number + '').replace(/[^0-9+-Ee.]/g, '');
      let n = !isFinite(+number) ? 0 : +number,

        toFixedFix = function (n, prec) {
          let k = Math.pow(10, prec);
          return '' + Math.round(n * k) / k;
        };

      s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');

      let re = /(-?\d+)(\d{3})/;

      while (re.test(s[0])) {
        s[0] = s[0].replace(re, "$1" + ',' + "$2");
      }

      if ((s[1] || '').length < prec) {
        s[1] = s[1] || '';
      }
    
      if (pointLength > 0) {
        val = s.join('.');
      } else {
        val = s.join('')
      }

      return val;
  
    }
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值