https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat#Using_options

文档中的示例:

var number = 123456.789;

// request a currency format
console.log(new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(number));
// → 123.456,79 €



我在节点10中的输出:

> new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(123456.789)
'€ 123,456.79'


文档右侧的欧元符号。当我实际运行代码时,在左侧。我是否需要设置语言环境或其他内容?我在美国。但是我实际上是在要求de-DE格式,似乎应该覆盖我的语言环境。运行示例中的确切代码没有区别。

最佳答案

您的Node很可能没有对Intl的完全语言环境支持,只有英语(small-icu

https://nodejs.org/api/intl.html#intl_detecting_internationalization_support

请尝试“检查非英语语言环境的支持”部分。



解决方案(如果您有small-icu,最可能的情况)


您可以(当然)重新编译(如上面链接的页面建议的那样)
但是您可以使用快捷方式,它可能会起作用并为您节省一些时间


启动节点并使用process.versions.icu
(在我的情况下是'62.1',对于节点v10.15.3
下载匹配的ICU源(包含数据文件)
该URL类似于http://download.icu-project.org/files/icu4c/ <version> / icu4c- <version> -src.tgz。
就我而言http://download.icu-project.org/files/icu4c/62.1/icu4c-62_1-src.tgz
解压缩ICU源并找到icu数据文件。在我的情况下,数据文件位于icu/source/data/in/icudt62l.dat。但是位置在其他ICU版本中可能有所不同(尽管我怀疑,这并非不可能:-)
设置NODE_ICU_DATA指向日期文件。
export NODE_ICU_DATA=<icu_data_path>/icudt62l.dat(定义变量)或env NODE_ICU_DATA=<icu_data_path>/icudt62l.dat node(定义+运行节点)
您可能希望将数据文件移到“更稳定”的位置,并删除ICU源





很遗憾,Node没有提供可立即下载的具有完整ICU支持的版本。
或者至少是与Node版本匹配的已存档ICU数据文件,因此我们不必进行所有这些挖掘工作。

关于javascript - 当文档说应该在右边时,为什么带有选项的Intl.NumberFormat在左边输出欧元符号?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57192048/

10-11 00:15