亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用逗號作為千位分隔符在JavaScript中打印數字

如何使用逗號作為千位分隔符在JavaScript中打印數字

長風秋雁 2019-05-23 10:27:15
如何使用逗號作為千位分隔符在JavaScript中打印數字我試圖用逗號作為千位分隔符在JavaScript中打印一個整數。例如,我想將數字1234567顯示為“1,234,567”。我該怎么做呢?我是這樣做的:function numberWithCommas(x) {     x = x.toString();     var pattern = /(-?\d+)(\d{3})/;     while (pattern.test(x))         x = x.replace(pattern, "$1,$2");     return x;}有更簡單或更優雅的方式嗎?如果它也適用于浮點數會很好,但這不是必需的。它不需要特定于語言環境來決定句點和逗號。
查看完整描述

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(".");}


查看完整回答
反對 回復 2019-05-23
?
一只名叫tom的貓

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可能會很有趣。


查看完整回答
反對 回復 2019-05-23
?
米脂

TA貢獻1836條經驗 獲得超3個贊

var number = 1234567890; // Example number to be converted

?請注意,javascript的最大整數值為9007199254740991


toLocaleString

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),它們在性能方面或多或少相同。


查看完整回答
反對 回復 2019-05-23
  • 3 回答
  • 0 關注
  • 711 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號