第一个我想到的是使用正则来处理,不考虑小数的情况下:
function test(num) {
return String(num).replace(/(\d)(?=(\d{3})+$)/g, "$1,");
}
当然如果要考虑小数的话就得把数字先转化为字符串,然后 split 分割去第一部分即可。
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 下也可以使用:
function test(num) {
return num.toLocaleString('en-US')
}
另外在 i18n 的数字处理上已经有 API 了。
var number = 3500;
console.log(new Intl.NumberFormat().format(number));
// → '3,500' if in US English locale
而就处理速度而言,使用正则的方式更快一些,测试环境(Node 8.9.1 & Chrome 62) 。
