將一個(gè)數(shù)字作為參數(shù),返回一個(gè)字符串,把整數(shù)部分從右到左每三位數(shù)添加一個(gè)逗號(hào),如:12000000.11 轉(zhuǎn)化為 12,000,000.11。
先看一種簡(jiǎn)潔的寫法 ,這種寫法要求對(duì)JS正則表達(dá)式較為深刻的理解。
廢話不說,來看代碼:
方法一
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)/會(huì)匹配到'Jack'僅僅當(dāng)它后面跟著'Sprat'。/Jack(?=Sprat|Frost)/匹配‘Jack’僅僅當(dāng)它后面跟著'Sprat'或者是‘Frost’。但是‘Sprat’和‘Frost’都不是匹配結(jié)果的一部分。
(?!x) 正向否定查找。
例如,/\d+(?!.)/匹配一個(gè)數(shù)字僅僅當(dāng)這個(gè)數(shù)字后面沒有跟小數(shù)點(diǎn)的時(shí)候。正則表達(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(".")
}
方法二就比較容易理解,但是相對(duì)于第一種就比較繁瑣。
看個(gè)人喜好,我比較傾向于方法一。