如何在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;
}

有没有更简单或更优雅的方式来做到这一点? 如果它也可以与浮动器一起工作,那将是很好的,但这不是必需的。 它不需要特定于语言环境来决定句点和逗号。


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

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

这是你真正需要知道的。

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

正则表达式使用2个lookahead断言:一个正面的查找字符串中的任意一点,后面有一个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位以上的数字,这个函数会在不需要的地方添加逗号。 如果这是一个问题,您可以使用此功能:

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

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

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

它也通过包含Intl在v0.12中起作用于Node.js

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


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 example
number2.toLocaleString(undefined, {maximumFractionDigits:2}) // "1,234.57"


NumberFormat (Safari不支持):

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

从我查看的内容(Firefox至少)来看,它们在性能上都差不多。

链接地址: http://www.djcxy.com/p/13553.html

上一篇: How to print a number with commas as thousands separators in JavaScript

下一篇: How can I format numbers as dollars currency string in JavaScript?