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/