Javascript 千位分隔符/字符串格式

2022-08-30 05:01:21

Javascript中是否有任何函数可以格式化数字和字符串?

我正在寻找一种方法为字符串或数字的千位分隔符...(如 String.Format in c#)


答案 1

更新(7年后)

下面原始答案中引用的参考文献是错误的。一个内置的函数,这正是kaiser在下面建议的:toLocaleString

所以你可以做:

(1234567.89).toLocaleString('en')              // for numeric input
parseFloat("1234567.89").toLocaleString('en')  // for string input

下面实现的函数也可以工作,但根本不是必需的。

(我想也许我会很幸运,在2010年发现这是必要的,但不是。根据这个更可靠的参考,toLocaleString 自 ECMAScript 3rd Edition [1999] 以来一直是该标准的一部分,我相信这意味着它早在 IE 5.5 之前就得到了支持。


原始答案

根据此参考,没有用于向数字添加逗号的内置函数。但该页面包含一个如何自己编码的示例:

function addCommas(nStr) {
    nStr += '';
    var x = nStr.split('.');
    var x1 = x[0];
    var x2 = x.length > 1 ? '.' + x[1] : '';
    var rgx = /(\d+)(\d{3})/;
    while (rgx.test(x1)) {
            x1 = x1.replace(rgx, '$1' + ',' + '$2');
    }
    return x1 + x2;
}

编辑:要采用另一种方式(将带逗号的字符串转换为数字),您可以执行如下操作:

parseFloat("1,234,567.89".replace(/,/g,''))

答案 2

如果 是关于本地化千位分隔符、分隔符和小数分隔符,请使用以下内容:

// --> numObj.toLocaleString( [locales [, options] ] )
parseInt( number ).toLocaleString();

您可以使用以下几个选项(甚至是具有回退的区域设置):

number = 123456.7089;

result  = parseInt( number ).toLocaleString() + "<br>";
result += number.toLocaleString( 'de-DE' ) + "<br>";
result += number.toLocaleString( 'ar-EG' ) + "<br>";
result += number.toLocaleString( 'ja-JP', { 
  style           : 'currency',
  currency        : 'JPY',
  currencyDisplay : 'symbol',
  useGrouping     : true
} ) + "<br>";
result += number.toLocaleString( [ 'jav', 'en' ], { 
  localeMatcher            : 'lookup',
  style                    : 'decimal',
  minimumIntegerDigits     : 2,
  minimumFractionDigits    : 2,
  maximumFractionDigits    : 3,
  minimumSignificantDigits : 2,
  maximumSignificantDigits : 3
} ) + "<br>";

var el = document.getElementById( 'result' );
el.innerHTML = result;
<div id="result"></div>

有关 MDN 信息页面的详细信息

编辑:像Serena这样的评论@I补充如下:

要支持具有非英语区域设置的浏览器,而我们仍然希望使用英语格式,请使用 .也适用于浮点。value.toLocaleString('en')