2012-05-30 48 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());