不是添加需求是一个大问题,而是node docs suggest that you don't need it:
// from the docs:
var number = 3500;
console.log(number.toLocaleString()); // Displays "3,500" in English locale
除非没有发生:
$ node
> var n = 1238909880
undefined
> n.toLocaleString()
'1238909880'
> n.toLocaleString('en-US' ) // docs on node don't suggest this, but on MDN they do so...
'1238909880'
> process.env.LANG
'en_US.UTF-8'
我是否必须携带i18n来获取我的号码中的逗号?在Number.toLocaleString的nodejs文档上没有任何相关内容。据我所知,我的LANG
看起来是正确的,这是不远的。尝试设置process.env.LANG到'en-US'并且输出没有改变。
答案 0 :(得分:4)
(等待几天寻求其他答案)
看起来这是一个已知问题,我发现的文档不是官方文档。我无法找到任何这种行为的官方文档。 MDN文档假设存在一个浏览器(可能有i18n)。浏览器之外的V8记录很少。
https://github.com/joyent/node/issues/4689
bnoordhuis评论道:
这可以说是一个V8错误。它忽略了区域设置。实际上,所有日期和数字格式化逻辑都是硬编码的。
它在Chrome和Chromium中的作用是因为这些项目在V8之上使用v8-i18n。我认为这不是我们想要的方向。这取决于libicu,这是一个庞大的图书馆。我们必须捆绑它,这将使我们已经很大的源树增加另外85 MB和~500,000 LoC。
我的解决方案就是这个(咖啡):
Number::withCommas = ->
parts = this.toString().split(".")
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",")
parts.join "."
替代解决方案:使用numeral.js。这很漂亮。
答案 1 :(得分:2)
这会改变。在节点中默认启用Intl。见https://github.com/joyent/node/pull/7719
编辑如果您下载节点v0.12,则默认情况下Intl已启用。