为长数字添加逗号分隔符

Jan 30 2019 Node.js

第一个我想到的是使用正则来处理,不考虑小数的情况下:

1
2
3
function test(num) {
return String(num).replace(/(\d)(?=(\d{3})+$)/g, "$1,");
}

当然如果要考虑小数的话就得把数字先转化为字符串,然后 split 分割去第一部分即可。

1
2
3
4
5
6
7
8
9
10
function test(n) {
var n = n || 0;
n = (n + "")
.split(".")
.map(function(s, i) {
return i ? s : s.replace(/(\d)(?=(\d{3})+$)/g, "$1,");
})
.join(".");
return n;
}

其实还有一个更简单的方式,Node 下也可以使用:

1
2
3
function test(num) {
return num.toLocaleString('en-US')
}

另外在 i18n 的数字处理上已经有 API 了。

1
2
3
4
var number = 3500;

console.log(new Intl.NumberFormat().format(number));
// → '3,500' if in US English locale

而就处理速度而言,使用正则的方式更快一些,测试环境(Node 8.9.1 & Chrome 62) 。

image