浏览器 intl.NumberFormat 未正确显示货币符号

问题描述 投票:0回答:3

我正在尝试使用 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 波兰兹罗提”

javascript typescript ecmascript-6 ecma
3个回答
2
投票

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);

1
投票

根据规格

但是,本地化货币符号可用的货币代码和语言标签的组合集取决于实现。如果本地化货币符号不可用,则使用 ISO 4217 货币代码进行格式化。


0
投票

要更简洁地仅显示货币符号,您可以考虑在

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。

© www.soinside.com 2019 - 2024. All rights reserved.