使用Javascript或jQuery为总计添加千位分隔符?

Mat*_*att 38 jquery

我有一个函数来汇总html表中的一列数据.它确实令人钦佩,我只想把它放在那里,需要将数千个分开.最初,您会注意到,添加的数字中有逗号.因此该函数将添加它们,它们将被删除.如何在那里添加逗号?

<script type="text/javascript">
    function sumOfColumns(tableID, columnIndex, hasHeader) {
        var tot = 0;
        $("#" + tableID + " tr" + (hasHeader ? ":gt(0)" : ""))
          .children("td:nth-child(" + columnIndex + ")")
          .each(function() {
              tot += parseInt($(this).html().replace(',', ''));
          });
        return "Total Pounds Entered : " + tot;
    }
</script>
Run Code Online (Sandbox Code Playgroud)

dav*_*010 81

$(this).html().replace(',', '')不该实际修改页面.你确定在页面中删除了逗号吗?

如果是,这个addCommas函数应该可以解决问题.

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)

  • [我做了一个 *稍微* 更简单的版本,用于检查 nStr 是否实际上是一个数字。](https://github.com/Blacksilver42/website-scripts/blob/master/thousep2.js) (2认同)

Gre*_*urt 20

使用toLocaleString()
在你的情况下做:

return "Total Pounds Entered : " + tot.toLocaleString(); 
Run Code Online (Sandbox Code Playgroud)


Ate*_*ral 18

这将添加千位分隔符,同时保留给定数字的小数部分:

function format(n, sep, decimals) {
    sep = sep || "."; // Default to period as decimal separator
    decimals = decimals || 2; // Default to 2 decimals

    return n.toLocaleString().split(sep)[0]
        + sep
        + n.toFixed(decimals).split(sep)[1];
}

format(4567354.677623); // 4,567,354.68
Run Code Online (Sandbox Code Playgroud)

您还可以使用以下方法探测区域设置的小数分隔符:

var sep = (0).toFixed(1)[1];
Run Code Online (Sandbox Code Playgroud)

  • @danorton:*叹息*...正如我之前提到的,这取决于_您的语言环境_。但这似乎也取决于浏览器。FF6,Windows 上的英语(加拿大)语言环境为我添加了逗号。`(4000).toLocaleString() === "4,000"`。如果你仍然不相信我,请过来亲自看看:( (2认同)
  • 这将返回 Chrome(2013 年 3 月)中美国语言环境组合的预期结果。如果浏览器支持,这显然是大多数用途的理想选择,因为数字分隔在很大程度上是一个区域设置问题(逗号 = 十进制和组分隔符 = 空格,我很确定,世界上大部分地区)。然而,行 'decimals = decimals || 2;' 是一个错误。零是小数参数的合理值,但它的计算结果为 false,因此您得到 2 而不是 0。 (2认同)

cha*_*ele 8

似乎这应该是批准的答案......

Intl.NumberFormat('en-US').format(count)
Run Code Online (Sandbox Code Playgroud)

请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat

  • 感谢这个答案 - 应该有更多的赞成票!兼容性也很好,甚至 IE 也可以处理这个(部分);) (2认同)

小智 5

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

用:

numberWithCommas(200000);
Run Code Online (Sandbox Code Playgroud)

==> 200,000