CAD货币的NumberFormat不正确

时间:2019-06-15 14:34:05

标签: javascript currency

我正在使用Intl.NumberFormat,并且在使用英语语言环境将货币设置为CAD时,我得到CA$5.00。我以为符号会是$ or Can$ or C$ or CAD的东西,我只是抛出了一个简单的Codepen https://codepen.io/jrock2004/pen/MMKqQq?editors=1010

const price = 5,
  locale = 'en-US',
  currency = 'CAD';

const formatter = new Intl.NumberFormat (locale, {
  style: 'currency',
  currency: currency,
});

const formattedPrice = formatter.format (price);

我做错什么了吗,或者根本没有错吗?谢谢

1 个答案:

答案 0 :(得分:2)

JavaScript引擎V8使用ICU进行货币(和其他语言环境)格式化。 ICU使用CLDR。在cldr中,我们有一个已定义的替代名称here的列表。 因此,当我们将语言环境设置为US(en_US)并想要美元时,符号为$。但是对于相同的语言环境,我们可以获得不同的美元,因此为了区分它,CDLR返回了不同的符号。如果将区域设置设置为en_CA,将货币设置为CAD,则将得到符号$,这是因为加拿大人将加元称为美元(在这里并不奇怪:))对于{{ 1}},我们将获得1.00美元。

CLDR中有几种替代的美元符号(AUD-A $,BRL-R $和其他几种)。

如果我们查看Intl.NumberFormat的文档, currencyDisplay选项可以是locale = 'en-CA', currency = 'USD'symbolcode。如果您通过name,您将获得code;如果您通过CAD 1.00,您将得到symbol

TLDR; Js使用的ICU使用CDLR,该CDLR针对您的情况返回CA$ 1.00