我正在尝试使用 Intl.NumberFormat 编写货币格式化函数。 当我传递诸如美元或欧元之类的货币时,它可以正常工作,但当我传递诸如 PLN 或 COL 等更晦涩的货币代码时,它似乎会崩溃,并且不会按要求显示其符号,而是显示代码。它清楚地识别了代码,因为当我要求它显示名称时,它可以正常工作:
Intl.NumberFormat("en-US",{
style:'currency',
minimumIntegerDigits:1,
currency: 'PLN',
currencyDisplay: 'symbol'
}).format(43);
显示“PLN43”,同时
Intl.NumberFormat("en-US",{
style:'currency',
minimumIntegerDigits:1,
currency: 'PLN',
currencyDisplay: 'name'
}).format(43);
显示“43.00 波兰兹罗提”
Intl.NumberFormat 应该有您需要的符号,您只需确保指定正确的语言代码即可。
您可以在此处找到 ISO 语言代码的映射: https://www.w3schools.com/tags/ref_language_codes.asp
在这种情况下,您需要使用波兰语值“pl”而不是“en-US”
Intl.NumberFormat("pl",{
style:'currency',
minimumIntegerDigits:1,
currency: 'PLN',
currencyDisplay: 'symbol'
}).format(43);
根据规格:
但是,本地化货币符号可用的货币代码和语言标签的组合集取决于实现。如果本地化货币符号不可用,则使用 ISO 4217 货币代码进行格式化。
要更简洁地仅显示货币符号,您可以考虑在
currencyDisplay: 'narrowSymbol'
配置中使用 symbol
而不是 Intl.NumberFormat
。此选项也适用于toLocaleString
。正如 MDN 文档中所述,narrowSymbol
提供了更简化的符号格式,例如“$100”而不是“US$100”。
Intl.NumberFormat("en-US", {
style: 'currency',
currency: 'PLN',
currencyDisplay: 'narrowSymbol'
}).format(43);
显示
'zł 43.00'
但是,请验证与您的目标浏览器的兼容性在 CanIUse 上,因为某些较旧或不太常见的浏览器不支持narrowSymbol。