将一个数字作为参数,返回一个字符串,把整数部分从右到左每三位数添加一个逗号,如: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(".")
}
方法二就比较容易理解,但是相对于第一种就比较繁琐。
看个人喜好,我比较倾向于方法一。