我正在使用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选项可以是symbol
,code
或name
。如果通过code
,则得到CAD 1.00
;如果通过symbol
,则得到CA$ 1.00
。
TLDR; Js使用ICU,该ICU使用针对您的案例返回CA$
的CDLR。
关于javascript - CAD货币的NumberFormat不正确,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56611301/