我正在使用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);


我是在做错事,还是根本没有错?谢谢

最佳答案

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

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

另外,如果我们查看Intl.NumberFormat文档
currencyDisplay选项可以是symbolcodename。如果通过code,则得到CAD 1.00;如果通过symbol,则得到CA$ 1.00

TLDR; Js使用ICU,该ICU使用针对您的案例返回CA$的CDLR。

关于javascript - CAD货币的NumberFormat不正确,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56611301/

10-09 13:56