Intl.NumberFormat货币:$ US货币符号?

时间:2018-09-19 16:28:07

标签: javascript currency number-formatting intl

我不明白NumberFormat的工作原理。

在法国,我们从不使用$US,为什么我得到以下内容?

new Intl.NumberFormat("fr-FR",{
            style: 'currency',
            currency: 'USD',
            minimumFractionDigits: 2,
         }).format("345")
"345,00 $US"

new Intl.NumberFormat("fr-FR",{
            style: 'currency',
            currency: 'EUR',
            minimumFractionDigits: 2,
         }).format("345")
"345,00 €"

此外:以下内容对我也没有任何意义。我尝试使用随机语言环境来查看影响,并针对以下2种方法获得了不同的结果:

new Intl.NumberFormat("en-HOS",{
            style: 'currency',
            currency: 'USD',
            minimumFractionDigits: 2,
         }).format("345")
"345,00 $US"

new Intl.NumberFormat("en-HOSSDDG",{
            style: 'currency',
            currency: 'USD',
            minimumFractionDigits: 2,
         }).format("345")
"$345.00"

此API是否损坏或我错过了什么?

2 个答案:

答案 0 :(得分:1)

在JS中格式化数字时,您需要使用窄选项

“ narrowSymbol”使用窄格式符号(“ $ 100”而不是“ US $ 100”),

const amount = 123444;
console.log(new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD', currencyDisplay: 'narrowSymbol'}).format(amount));

有关详细信息,请参见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat

答案 1 :(得分:0)

V8 JavaScript引擎正在使用iCU的ICU库。

在此处查看所有货币数据:https://github.com/unicode-org/icu/tree/master/icu4c/source/data/curr

但是可以肯定的是,法国人在谈论美元时使用的是 $ 而不是 $ US