为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用逗号作为千位分隔符在JavaScript中打印数字

如何使用逗号作为千位分隔符在JavaScript中打印数字

长风秋雁 2019-05-23 10:27:15
如何使用逗号作为千位分隔符在JavaScript中打印数字我试图用逗号作为千位分隔符在JavaScript中打印一个整数。例如,我想将数字1234567显示为“1,234,567”。我该怎么做呢?我是这样做的:function numberWithCommas(x) {     x = x.toString();     var pattern = /(-?\d+)(\d{3})/;     while (pattern.test(x))         x = x.replace(pattern, "$1,$2");     return x;}有更简单或更优雅的方式吗?如果它也适用于浮点数会很好,但这不是必需的。它不需要特定于语言环境来决定句点和逗号。
查看完整描述

3 回答

?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

我使用了克里答案中的想法,但简化了它,因为我只是为了我的特定目的而寻找简单的东西。这是我做的:

function numberWithCommas(x) {
    return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");}

这是你真正需要知道的。

@Neils Bom询问了正则表达式的工作原理。我的解释有点长。它不适合评论,我不知道在哪里放,所以我在这里做。如果有人有任何其他建议,请告诉我。

正则表达式使用2个前瞻断言:一个正向查找字符串中的任何一个点,后面有一个3位数的倍数,以及一个负断言,以确保该点只有3个数字的正数。替换表达式在那里放一个逗号。

例如,如果你传递它“123456789.01”,正断言将匹配7左边的每个点(因为“789”是3位数的倍数,“678”是3位数的倍数,“567”,等等。)。否定断言检查3位数的倍数后面没有任何数字。“789”之后有一段时间,所以它正好是3位数的倍数,所以逗号就在那里。“678”是3位数的倍数,但它后面有一个“9”,所以这3个数字是一组4的一部分,逗号不会去那里。同样对于“567”。“456789”是6位数,是3的倍数,所以在此之前使用逗号。“345678”是3的倍数,但它后面有一个“9”,所以没有逗号。等等。“\ B”

@ neu-rah提到如果小数点后面有3位以上的数字,这个函数会在不受欢迎的地方添加逗号。如果这是一个问题,您可以使用此功能:

function numberWithCommas(x) {
    var parts = x.toString().split(".");
    parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
    return parts.join(".");}


查看完整回答
反对 回复 2019-05-23
?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

我很惊讶没人提到Number.prototype.toLocaleString。它是在JavaScript 1.5(1999年推出)中实现的,因此它基本上支持所有主流浏览器。

var n = 34523453.345n.toLocaleString()"34,523,453.345"

通过包含Intl,它也适用于v0.12的Node.js

请注意,此函数返回一个字符串,而不是一个数字。

如果你想要不同的东西,Numeral.js可能会很有趣。


查看完整回答
反对 回复 2019-05-23
?
米脂

TA贡献1836条经验 获得超3个赞

var number = 1234567890; // Example number to be converted

⚠请注意,javascript的最大整数值为9007199254740991


toLocaleString

number.toLocaleString(); // "1,234,567,890"// A more complex example: var number2 = 1234.56789;
// floating point examplenumber2.toLocaleString(undefined, {maximumFractionDigits:2}) // "1,234.57"


NumberFormat(不支持 Safari):

var nf = new Intl.NumberFormat();nf.format(number); // "1,234,567,890"

根据我的检查(至少是Firefox),它们在性能方面或多或少相同。


查看完整回答
反对 回复 2019-05-23
  • 3 回答
  • 0 关注
  • 683 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号