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 位数字,如上所示。

4

4 回答 4

11

结果将取决于您的浏览器区域设置。但这可能是一个可以接受的解决方案:

(7123456789.56742).toLocaleString();

输出:

7,123,456,789.56742

试试看它是否7,12,34,56,789.567421在您的语言环境中输出。

于 2012-05-30T06:08:31.940 回答
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('');
  }
}
于 2012-05-30T05:55:58.797 回答
3

使用 toLocaleString(); 它会自动处理插入逗号,也会以正确的方式处理英国字符串

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

于 2015-04-01T18:41:32.090 回答
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]; 
}
于 2013-05-15T07:26:46.637 回答