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(".");}

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可能会很有趣。

TA贡献1836条经验 获得超3个赞
var number = 1234567890; // Example number to be converted
⚠请注意,javascript的最大整数值为9007199254740991
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),它们在性能方面或多或少相同。
添加回答
举报