程序员web前端

数字添加逗号分隔符

2017-08-02  本文已影响0人  北纬40度的思念

将一个数字作为参数,返回一个字符串,把整数部分从右到左每三位数添加一个逗号,如:12000000.11 转化为 12,000,000.11。

先看一种简洁的写法 ,这种写法要求对JS正则表达式较为深刻的理解。
废话不说,来看代码:

方法一

function numCommaFormat(number) {
  var arr = number.toString().split(".");
  var newNum  = arr[0].replace(/(?!\b)(?=(\d{3})+$)/g, ",");
  arr[0] = newNum;
  return arr.join(".");
}

(?=x) 正向肯定查找。

例如,/Jack(?=Sprat)/会匹配到'Jack'仅仅当它后面跟着'Sprat'。/Jack(?=Sprat|Frost)/匹配‘Jack’仅仅当它后面跟着'Sprat'或者是‘Frost’。但是‘Sprat’和‘Frost’都不是匹配结果的一部分。

(?!x) 正向否定查找。

例如,/\d+(?!.)/匹配一个数字仅仅当这个数字后面没有跟小数点的时候。正则表达式/\d+(?!.)/.exec("3.141")匹配‘141’但是不是‘3.141’。

方法二

function commafy (num) {
  var prefix = num < 0 ? "-" : "";
  num  = Math.abs(num).toString();
  var arr = num.split(".");
  var prev = arr[0].split("").reverse();
  var newPrev = [];
  
  for(var i = 0; i< prev.length; i++) {
    newPrev.unshift(prev[i]);
    if(i%3 == 2 &&  i < (prev.length -1)) {
      newPrev.unshift(",")
    }
  }
  
  arr[0] = newPrev.join("");
  return prefix + arr.join(".")
}

方法二就比较容易理解,但是相对于第一种就比较繁琐。
看个人喜好,我比较倾向于方法一。

上一篇 下一篇

猜你喜欢

热点阅读