3 回答

TA貢獻1801條經驗 獲得超16個贊
我使用了克里答案中的想法,但簡化了它,因為我只是為了我的特定目的而尋找簡單的東西。這是我做的:
function numberWithCommas(x) { return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");}
這是你真正需要知道的。
@Neils Bom詢問了正則表達式的工作原理。我的解釋有點長。它不適合評論,我不知道在哪里放,所以我在這里做。如果有人有任何其他建議,請告訴我。
正則表達式使用2個前瞻斷言:一個正向查找字符串中的任何一個點,后面有一個3位數的倍數,以及一個負斷言,以確保該點只有3個數字的正數。替換表達式在那里放一個逗號。
例如,如果你傳遞它“123456789.01”,正斷言將匹配7左邊的每個點(因為“789”是3位數的倍數,“678”是3位數的倍數,“567”,等等。)。否定斷言檢查3位數的倍數后面沒有任何數字?!?89”之后有一段時間,所以它正好是3位數的倍數,所以逗號就在那里?!?78”是3位數的倍數,但它后面有一個“9”,所以這3個數字是一組4的一部分,逗號不會去那里。同樣對于“567”?!?56789”是6位數,是3的倍數,所以在此之前使用逗號。“345678”是3的倍數,但它后面有一個“9”,所以沒有逗號。等等?!癨 B”
@ neu-rah提到如果小數點后面有3位以上的數字,這個函數會在不受歡迎的地方添加逗號。如果這是一個問題,您可以使用此功能:
function numberWithCommas(x) { var parts = x.toString().split("."); parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ","); return parts.join(".");}

TA貢獻1906條經驗 獲得超3個贊
我很驚訝沒人提到Number.prototype.toLocaleString。它是在JavaScript 1.5(1999年推出)中實現的,因此它基本上支持所有主流瀏覽器。
var n = 34523453.345n.toLocaleString()"34,523,453.345"
通過包含Intl,它也適用于v0.12的Node.js
請注意,此函數返回一個字符串,而不是一個數字。
如果你想要不同的東西,Numeral.js可能會很有趣。

TA貢獻1836條經驗 獲得超3個贊
var number = 1234567890; // Example number to be converted
?請注意,javascript的最大整數值為9007199254740991
number.toLocaleString(); // "1,234,567,890"// A more complex example: var number2 = 1234.56789; // floating point examplenumber2.toLocaleString(undefined, {maximumFractionDigits:2}) // "1,234.57"
NumberFormat(不支持 Safari):
var nf = new Intl.NumberFormat();nf.format(number); // "1,234,567,890"
根據我的檢查(至少是Firefox),它們在性能方面或多或少相同。
添加回答
舉報