美文网首页
js实现金额‘千位分隔符’的思路及代码

js实现金额‘千位分隔符’的思路及代码

作者: Xindot | 来源:发表于2016-06-13 16:31 被阅读626次

    找了一些js实现千位分隔符的代码,发现有些有漏洞,一个是不能处理带有小数点的数,一个是不能处理大数,综合两个代码,整理了一下,大概思路:

    数先转为字符串并判断数是否有小数,如有,连小数点拿掉并暂存,
    再除以3得余数,再根据‘余数’和‘3’将字符串拆分push到数组,
    最后转字符串再加上之前暂存的小数
    

    代码如下:

    // 千位分隔符(js 实现)
    function thousandBitSeparator(str){ 
        str = String(str);
        if (str.indexOf('.')>=0) {
            var postfix = str.substring(str.indexOf('.'));
            str = str.substring(0,str.indexOf('.'));
        }else{
            var postfix = '';
        };
        // console.log(postfix);
        // .99
        // console.log(str);
        // 9999999999999
        var iNum = str.length % 3; 
        var prev = ''; 
        var iNow = 0; 
        var temp = ''; 
        var arr = []; 
        if (iNum != 0){ 
            prev = str.substring(0, iNum); 
            arr.push(prev); 
        } 
        str = str.substring(iNum); 
        for (var i = 0; i < str.length; i++){ 
            iNow++; 
            temp += str[i]; 
            if (iNow == 3 && temp){ 
              arr.push(temp); 
              temp = ''; 
              iNow = 0; 
            } 
        } 
        // console.log(arr);
        // ["9", "999", "999", "999", "999"]
        return arr.join(',') + postfix; 
    }
     
    // console.log(thousandBitSeparator('9999999999999.99'));
    // 9,999,999,999,999.99
    

    测试有效

    后来看到同事发布的优化方案,觉得很棒

    function splitK(num) {
      var decimal = String(num).split('.')[1] || '';//小数部分
      var tempArr = [];
      var revNumArr = String(num).split('.')[0].split("").reverse();//倒序
      for (i in revNumArr){
        tempArr.push(revNumArr[i]);
        if((i+1)%3 === 0 && i != revNumArr.length-1){
          tempArr.push(',');
        }
      }
      var zs = tempArr.reverse().join('');//整数部分
      return decimal?zs+'.'+decimal:zs;
    }
    var num = '123456789.123';
    console.log(splitK(num));
    //输出:123,456,789.123
    

    思路更简单:
    先分离出小数部分;
    对整数部分逆序为数组;
    每三个数字插入一个逗号,如果是3的倍数位则最后一个不插入;
    再逆序回来,拼接小数部分(如果有的话)。
    参考 给一个数值加千位分隔号

    测试如果是数字类型可能提示undefined,对num加个String()即可

    相关文章

      网友评论

          本文标题:js实现金额‘千位分隔符’的思路及代码

          本文链接:https://www.haomeiwen.com/subject/llmydttx.html