2014-11-05 52 views
2

如何修改下面的函數,使其在我們點擊小數點標記後停止添加逗號?在JavaScript中添加逗號功能太貪婪

addCommas = function(number) { 
    if(number === undefined) { 
     return ''; 
    } 

    while(/(\d+)(\d{3})/.test(number.toString())) { 
     number = number.toString().replace(/(\d+)(\d{3})/, '$1'+','+'$2'); 
    } 

    return number; 
} 

addCommas(0.123456); // Outputs 0.123,456, should output 0.123456 
+0

設置一個布爾標誌,TRUE;遇到時'.'。 – hjpotter92 2014-11-05 18:57:26

+1

如果這不僅僅是一個練習,你可以學習一些東西,我可能會使用numer.js:http://numeraljs.com/ – Paul 2014-11-05 19:00:17

+0

可能的重複[如何在JavaScript中使用逗號作爲千位分隔符來打印數字] (http://stackoverflow.com/q/2901102/1048572) – Bergi 2014-11-05 19:01:05

回答

5

我的方法是將數分成整數和小數部分...

addCommas = function(number) 
 
{ 
 
    if (number === undefined) 
 
     return ''; 
 
    var parts = number.toString().split("."); 
 
    parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ","); 
 
    return parts.join("."); 
 
} 
 

 
document.write(addCommas(0.123456) + "<br />"); 
 
document.write(addCommas(123456.123456) + "<br />"); 
 
document.write(addCommas(123456) + "<br />");

+1

爲+1做我做的事情,但以一種更簡單,更清潔的方式。 – Renan 2014-11-05 19:01:49

+1

謝謝李先生!很棒 – 2014-11-05 19:29:06

1

我將使用正則表達式之前打破串兩種。如:

RenanCommas = function(number) { 
    if(number === undefined) { 
     return ''; 
    } 

    var parts = (number + "").split("."); 
    var integerPart = parts[0]; 
    var decimalPart = parts.length > 1 ? parts[1] : "0"; 

    while(/(\d+)(\d{3})/.test(integerPart.toString())) { 
     integerPart = integerPart.replace(/(\d+)(\d{3})/, '$1'+','+'$2'); 
    } 

    return integerPart + "." + decimalPart; 
} 

請注意,您也可以使用decimalPart作爲空字符串。在這種情況下,您可以在使用之前檢查它是否爲空。如果您使用的是空字符串,而不是"0",最後一行會是這樣的:

return integerPart + (decimalPart ? ("." + decimalPart) : ""); 

當你運行它:

RenanCommas(12121241243.1123131232); // outputs "12,121,241,243.112312" 
4

只需添加^[^.]*到模式的前面:

addCommas = function(number) { 
    if(number === undefined) { 
     return ''; 
    } 

    while(/^[^.]*(\d+)(\d{3})/.test(number.toString())) { 
     number = number.toString().replace(/(\d+)(\d{3})/, '$1'+','+'$2'); 
    } 

    return number; 
} 

您只需要爲.test()調用執行此操作。

1

這似乎是工作:

addCommas = function(number) { 
    return number.replace(/(\.\d+$)|(?!^)(?=(?:\d{3})+(?=\.|$))/g, function($0, $1) { 
     return ($1)?$1:','; }); 
} 

例子:

addCommas('0.123456'); 
"0.123456" 
addCommas('987654.123456'); 
"987,654.123456" 
addCommas('987654321'); 
"987,654,321"