Intl.NumberFormat 没有做数百万正确

Posted

技术标签:

【中文标题】Intl.NumberFormat 没有做数百万正确【英文标题】:Intl.NumberFormat not doing millions correct 【发布时间】:2020-07-10 00:03:13 【问题描述】:

所以我有一个大货币值表,我正在使用国际数字格式化程序,如下所示:

const formatCurrency = new Intl.NumberFormat("en-IN", 
    style: "currency",
    currency: "USD",
    minimumFractionDigits: 0,
    currencyDisplay: "narrowSymbol"
)

但是当数字大于 5 位时,输出会在错误的位置放置一个“,”。像这样:2,75,450 美元。应该是 275,450 美元。或者像这样:14,75,099 美元。应该是 1,475,099 美元。

我浏览了文档并没有找到任何东西,但我很可能遗漏了一些东西。

帮助?

【问题讨论】:

【参考方案1】:

您将印度英语指定为区域设置 (en-IN)。

$14,75,099 在印度的正确格式,代表 140 万 75,000 和 99,因为它们使用不同的单位($1,475,099 是错误的,因为百万不是那里常用的单位) .

您可以在Wikipedia 上阅读有关印度编号系统的更多信息:

印度编号系统在印度次大陆用于表示大数。术语 lakh (100,000) 和 crore (10,000,000) 是表示系统中大量数字的最常用术语(即使在英语中,例如称为印度英语的本地变体)。例如,150,000 卢比在印度被称为“15 万卢比”,写成 1,50,000 卢比; 30,000,000(三千万)卢比被称为“3 crore rupees”,写成 3,00,00,000 卢比,用逗号在千位、十万位和千万位。

[...]

印度编号系统使用与国际标准不同的分隔符。印度编号系统不是像国际系统中那样将数字按三位分组,而是将最右边的三位数字组合在一起(直到百位),然后按两位数一组。因此,一万亿将被写为 10 ,00,00,00,00,000 或 10 kharab(或一亿千万)。这使得使用系统术语可以方便地阅读数字。

(强调我的。)

如果这是一个错误并且您不想要印度语言环境,那么您需要更改您的代码以使用例如en-USen-UK 而不是 en-IN

【讨论】:

天哪,非常感谢!我怀疑它与该代码有关,但我在任何地方都找不到英语的不同选项。谢谢!

以上是关于Intl.NumberFormat 没有做数百万正确的主要内容,如果未能解决你的问题,请参考以下文章

Intl.NumberFormat#format 最大整数值

Intl.NumberFormat 中的多个语言环境?

如何将 Intl.NumberFormat 与本机反应一起使用?

使用不带货币符号的 Intl.NumberFormat 进行货币格式化

为啥 Intl.NumberFormat 不适用于 Safari 和 Firefox 中的单位?

Intl.NumberFormat 返回数字和货币符号通过间距划分的结果