2012-05-30 91 views
3

我想格式化數字。我已經看到了一些正則表達式示例在數字字符串中插入逗號。他們都在一行中檢查3位數字,然後在數字中插入逗號。但我想要這樣的事情:使用逗號格式的數字串

122 as 122 
1234 as 1,234 
12345 as 12,345 
1723456 as 17,23,456 
7123456789.56742 as 7,12,34,56,789.56742 

我是非常新的正則表達式。請幫助我如何顯示上述數字。我已經嘗試了下面的方法。這總是檢查3位數字,然後添加逗號。

function numberWithCommas(x) { 
    return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); 
} 

但我想每個2位數的逗號除了小數點前的最後3位數字如上所示。

+0

你想在正則表達式或JavaScript的答案..或告訴你已經嘗試過? –

+0

@學習者:從哪方面來看,這很簡單。 – user850234

+0

@Learner你是什麼意思「在正則表達式或JavaScript」?答案可以,也可能會是*兩者*。 – Sampson

回答

4

這裏有一個數字轉換爲歐洲的函數(1.000,00 - 默認)或美國(1,000.00)風格:

function sep1000(somenum,usa){ 
    var dec = String(somenum).split(/[.,]/) 
    ,sep = usa ? ',' : '.' 
    ,decsep = usa ? '.' : ','; 
    return dec[0] 
     .split('') 
     .reverse() 
     .reduce(function(prev,now,i){ 
        return i%3 === 0 ? prev+sep+now : prev+now;} 
       ) 
     .split('') 
     .reverse() 
     .join('') + 
     (dec[1] ? decsep+dec[1] :'') 
    ; 
} 

備選:

function sep1000(somenum,usa){ 
    var dec = String(somenum).split(/[.,]/) 
    ,sep = usa ? ',' : '.' 
    ,decsep = usa ? '.' : ','; 

    return xsep(dec[0],sep) + (dec[1] ? decsep+dec[1] :''); 

    function xsep(num,sep) { 
    var n = String(num).split('') 
     ,i = -3; 
    while (n.length + i > 0) { 
     n.splice(i, 0, sep); 
     i -= 4; 
    } 
    return n.join(''); 
    } 
} 
//usage for both functions 
alert(sep1000(10002343123.034));  //=> 10.002.343.123,034 
alert(sep1000(10002343123.034,true)); //=> 10,002,343,123.034 

[編輯基於評論]如果你想分開100,只需將i -= 4;更改爲i -= 3;

function sep100(somenum,usa){ 
    var dec = String(somenum).split(/[.,]/) 
    ,sep = usa ? ',' : '.' 
    ,decsep = usa ? '.' : ','; 

    return xsep(dec[0],sep) + (dec[1] ? decsep+dec[1] :''); 

    function xsep(num,sep) { 
    var n = String(num).split('') 
     ,i = -3; 
    while (n.length + i > 0) { 
     n.splice(i, 0, sep); 
     i -= 3; //<== here 
    } 
    return n.join(''); 
    } 
} 
+0

對不起,實際上是想'10,00,23,43,123.034'而不是'10,002,343,123.034'這樣刪除了接受的答案 – user850234

+0

@Kooilnc謝謝投票給我 – user850234

10

結果將取決於您的瀏覽器語言環境。但是,這可能是一個可接受的解決方案:

(7123456789.56742).toLocaleString(); 

輸出:

7,123,456,789.56742 

試試吧,看看它是否在您的區域輸出7,12,34,56,789.567421

+0

@Jack:對不起,我看到我現在寫了錯誤的評論。感謝您的注意。 – user850234

+0

不,我沒有得到輸出7,12,34,56,789.567421 – user850234

0

下面是代碼片斷,可以更好的方式來完成,但這個工程:d

function formatDollar(num) 
{ 
var p = num.toFixed(2).split("."); 
var chars = p[0].split("").reverse(); 
var sep1000 = false; 
var newstr = ''; 
var count = 0; 
var count2=0; 
for (x in chars) 
{ 
count++; 
if(count%3 == 1 && count != 1 %% !sep1000) 
{ 
newstr = chars[x] + ',' + newstr; 
sep1000=true; 
} 
else 
{ 
if(!sep1000) 
{ 
newstr = chars[x] + ',' + newstr; 
} 
else 
{ 
count2++; 
if(count%2 == 0 && count != 1) 
{ 
newstr = chars[x] + ',' + newstr; 
} 
else 
{ 
newstr = chars[x] + newstr; 
} 
} 
} 
} 
return newstr + "." + p[1]; 
} 
2

使用的toLocaleString(); 它會自動處理插入逗號,並且還會以正確的方式處理英國字符串

例如, var num=63613612837131; alert(num.toLocaleString());