4

并不是说添加 require 很重要,但节点文档建议您不需要它:

// 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' 并且输出没有改变。

4

2 回答 2

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 "."

替代解决方案:使用numeric.js。这很漂亮。

于 2013-07-30T16:11:57.817 回答
2

这将改变。致力于在节点中默认启用 Intl。见https://github.com/joyent/node/pull/7719

编辑如果您下载节点 v0.12,则默认情况下 Intl 处于打开状态。

于 2014-08-15T17:33:22.077 回答