使用逗号格式化JavaScript编号

时间:2014-11-07 12:46:46

标签: javascript

我有一个JavaScript编号,例如1234.5678。我试图显示最多四位小数的数据。另外,我想添加相应的逗号。换句话说,我想将之前的数字显示为1,234.5678。目前,我有以下内容:

var output = Number(1234.5678).toFixed(4);
output = output.replace(/\B(?=(\d{3})+(?!\d))/g, ",");

不幸的是,这种方法将我的输入值呈现为1,234.5,678。小数点右边的逗号是不受欢迎的。但是,我不确定解决此问题的正确方法是什么。似乎应该有一种简单的方法来使用纯JavaScript 格式化数字。请注意,我正在尝试学习JavaScript的细节。出于这个原因,我不是在追求一个库来解决这个问题。相反,我正在尝试更多地了解语言本身。

谢谢!

3 个答案:

答案 0 :(得分:4)

尝试使用toLocaleString方法

(1234.5678).toLocaleString()
"1,234.568"

答案 1 :(得分:0)

尝试使用此方法

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString

它允许格式化字符串的本地设置

答案 2 :(得分:0)

您可以扩展Number并创建一个可以定义的函数:

  • 小数点数
  • 要用作小数点分隔符的字符
  • 要用作千位分隔符的字符



Number.prototype.toCustomFormat = function (decimals, decimal_sep, thousands_sep) {
    var default_decimals      = 4,
        default_decimal_sep   = '.',
        default_thousands_sep = ',';

    var n = this,
        sign = (n < 0) ? '-' : '',

        // if decimal is zero we must take it, 
        // it means user does not want to show any decimal
        c = isNaN(decimals) ? default_decimals : Math.abs(decimals),

        // if no decimal separetor is passed 
        // we use the comma as default decimal separator
        d = decimal_sep || default_decimal_sep,

        // if you don't want ot use a thousands separator 
        // you can pass empty string as thousands_sep value
        t = thousands_sep || default_thousands_sep,

        // extracting the absolute value of the integer part of the number 
        // and converting to string
        i = parseInt(n = Math.abs(n).toFixed(c)) + '',

        j = ((j = i.length) > 3) ? j % 3 : 0;

    return sign + (j ? i.substr(0, j) 
                + t : '') 
                + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) 
                + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : '');
};


// Display Results when running snippet
var results = document.getElementById('results');
results.innerHTML += (1234.5678).toCustomFormat() + '<br />';
results.innerHTML += (1234.5678).toCustomFormat(2) + '<br />';
results.innerHTML += (1234.5678).toCustomFormat(2, ',', '.') + '<br />';
results.innerHTML += (1234.5678).toCustomFormat(2, ',', '.') + '<br />';
&#13;
<div id="results"></div>
&#13;
&#13;
&#13;

实施例

(1234.5678).toCustomFormat() => "1,234.5678"
(1234.5678).toCustomFormat(2) => "1,234.57"
(1234.5678).toCustomFormat(2, ',', '.') => "1.234,57"
(1234.5678).toCustomFormat(2, '.', ',') => "1,234.57"