英文:
How to override the currency symbol used by Intl.NumberFormat
问题
我正在使用 Intl.NumberFormat
来在网页上格式化货币,但我想使用特定的货币符号而不是定义的区域设置。
具体来说,我想在加拿大元的情况下显示 C$
,而不是标准的 $
,即使区域设置设置为 en-CA
或 fr-CA
。
示例:
> Intl.NumberFormat('en-CA', { style: 'currency', currency: 'CAD' }).format(13999.59)
'$13,999.59' // 预期结果 'C$13,999.59'
> Intl.NumberFormat('fr-CA', { style: 'currency', currency: 'CAD' }).format(13999.59)
'13 999,59 $' // 预期结果 '13 999,59 C$'
我想应该有一种方法可以 覆盖 货币符号,但我在文档中找不到如何做的方法。
那么,我如何在特定区域设置下覆盖货币符号呢?
英文:
I am using the Intl.NumberFormat
to format currencies on a web page, but I want to use specific currency symbols instead of the locale defined ones.
To be more specific, I want to show C$
for Canadian dollars, instead of the standard $
, even though the locale is set to en-CA
or fr-CA
.
Example:
> Intl.NumberFormat('en-CA', { style: 'currency', currency: 'CAD' }).format(13999.59)
'$13,999.59' // expected 'C$13,999.59'
> Intl.NumberFormat('fr-CA', { style: 'currency', currency: 'CAD' }).format(13999.59)
'13 999,59 $' // expected '13 999,59 C$'
I suppose there is a way to override the currency symbol, but I couldn't find how in the docs.
So, how can I override the currency symbol for a specific locale?
答案1
得分: 2
是的。可以使用Intl.NumberFormat.prototype.formatToParts()
方法实现。
const enCA = Intl.NumberFormat('en-CA', { style: 'currency', currency: 'CAD' }).formatToParts(13999.59).map(({ type, value }) => {
switch (type) {
case "currency":
return `C$`;
default:
return value;
}
}).reduce((str, pt) => str + pt);
const frCA = Intl.NumberFormat('fr-CA', { style: 'currency', currency: 'CAD' }).formatToParts(13999.59).map(({ type, value }) => {
switch (type) {
case "currency":
return `C$`;
default:
return value;
}
}).reduce((str, pt) => str + pt);
console.log(enCA);
console.log(frCA);
英文:
Yes. It is possible with Intl.NumberFormat.prototype.formatToParts()
method.
<!-- begin snippet: js hide: false console: true babel: false -->
<!-- language: lang-js -->
const enCA = Intl.NumberFormat('en-CA', { style: 'currency', currency: 'CAD' }).formatToParts(13999.59).map(({ type, value }) => {
switch (type) {
case "currency":
return `C$`;
default:
return value;
}
}).reduce((str, pt) => str + pt);
const frCA = Intl.NumberFormat('fr-CA', { style: 'currency', currency: 'CAD' }).formatToParts(13999.59).map(({ type, value }) => {
switch (type) {
case "currency":
return `C$`;
default:
return value;
}
}).reduce((str, pt) => str + pt);
console.log(enCA);
console.log(frCA);
<!-- end snippet -->
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论