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

Los*_*ord 78 javascript string format numbers

Javascript中是否有用于格式化数字和字符串的函数?

我正在为字符串或数字寻找千位分隔符...(类似于String中的String.Format)

Tim*_*man 124

更新(7年后)

以下原始答案中引用的参考文献是错误的.这里一个内置的功能,这一点,而这正是德皇以下建议:toLocaleString

所以你可以这样做:

(1234567.89).toLocaleString('en')              // for numeric input
parseFloat("1234567.89").toLocaleString('en')  // for string input
Run Code Online (Sandbox Code Playgroud)

下面实现的功能也有效,但根本不是必需的.

(我想也许我很幸运,发现它在2010年必要,但没有.根据这个更可靠的参考,toLocaleString自ECMAScript第3版[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;
}
Run Code Online (Sandbox Code Playgroud)

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

parseFloat("1,234,567.89".replace(/,/g,''))
Run Code Online (Sandbox Code Playgroud)

  • 使用(1234567).toLocaleString()。replace(/,/ g,“”,) (3认同)

kai*_*ser 121

如果要本地化千位分隔符,分隔符和小数分隔符,请执行以下操作:

// --> numObj.toLocaleString( [locales [, options] ] )
parseInt( number ).toLocaleString();
Run Code Online (Sandbox Code Playgroud)

您可以使用多种选项(甚至是具有后备的区域设置):

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;
Run Code Online (Sandbox Code Playgroud)
<div id="result"></div>
Run Code Online (Sandbox Code Playgroud)

MDN信息页面的详细信息.

编辑:评注@I像Serena增加了以下内容:

要支持我们仍希望使用英语格式的非英语语言环境的浏览器,请使用value.toLocaleString('en').也适用于浮点.

  • 要支持我们仍希望使用英语格式的非英语语言环境的浏览器,请使用`value.toLocaleString('en')`.也适用于浮点. (2认同)
  • 仅供参考,对于像“7,77,77,777”这样的印度数字格式,请使用“value.toLocaleString('en-IN')” (2认同)

Emi*_*ary 29

试图用一个正则表达式来处理这个问题(没有回调)我的当前能力因为Javascript中没有负面的后视而让我失望...从来没有这么简单的另一种简洁的替代方案适用于大多数一般情况 - 占任何小数点通过忽略匹配的索引出现在句点索引之后的匹配.

const format = num => 
    String(num).replace(/(?<!\..*)(\d)(?=(?:\d{3})+(?:\.|$))/g, '$1,')

;[
    format(100),                           // "100"
    format(1000),                          // "1,000"
    format(1e10),                          // "10,000,000,000"  
    format(1000.001001),                   // "1,000.001001"
    format('100000000000000.001001001001') // "100,000,000,000,000.001001001001
]
    .forEach(n => console.log(n))
Run Code Online (Sandbox Code Playgroud)

»详细的正则表达式解释(regex101.com)

流程图


qde*_*dev 9

有一个很好的jQuery数字插件:https://github.com/teamdf/jquery-number

它允许您以您喜欢的格式更改任何数字,包括十进制数字选项和十进制和千位分隔符:

$.number(12345.4556, 2);          // -> 12,345.46
$.number(12345.4556, 3, ',', ' ') // -> 12 345,456
Run Code Online (Sandbox Code Playgroud)

您可以直接在输入字段中使用它,这更好,使用上面相同的选项:

$("input").number(true, 2);
Run Code Online (Sandbox Code Playgroud)

或者您可以使用选择器应用于整个DOM元素集:

$('span.number').number(true, 2);
Run Code Online (Sandbox Code Playgroud)


Abh*_*oel 6

我用这个:

function numberWithCommas(number) {
    return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
Run Code Online (Sandbox Code Playgroud)

来源:链接


小智 5

// thousand separates a digit-only string using commas
// by element:  onkeyup = "ThousandSeparate(this)"
// by ID:       onkeyup = "ThousandSeparate('txt1','lbl1')"
function ThousandSeparate()
{
    if (arguments.length == 1)
    {
        var V = arguments[0].value;
        V = V.replace(/,/g,'');
        var R = new RegExp('(-?[0-9]+)([0-9]{3})'); 
        while(R.test(V))
        {
            V = V.replace(R, '$1,$2');
        }
        arguments[0].value = V;
    }
    else  if ( arguments.length == 2)
    {
        var V = document.getElementById(arguments[0]).value;
        var R = new RegExp('(-?[0-9]+)([0-9]{3})'); 
        while(R.test(V))
        {
            V = V.replace(R, '$1,$2');
        }
        document.getElementById(arguments[1]).innerHTML = V;
    }
    else return false;
}   
Run Code Online (Sandbox Code Playgroud)


vik*_*144 5

var number = 35002343;

console.log(number.toLocaleString());
Run Code Online (Sandbox Code Playgroud)

对于参考,您可以在此处查看 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString