我正在使用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);
我做错什么了吗,或者根本没有错吗?谢谢
答案 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'
,symbol
或code
。如果您通过name
,您将获得code
;如果您通过CAD 1.00
,您将得到symbol
。
TLDR; Js使用的ICU使用CDLR,该CDLR针对您的情况返回CA$ 1.00
。