首页 > 解决方案 > Intl.NumberFormat 没有做数百万正确

问题描述

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

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 美元。

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

帮助?

标签: numberscurrencynumber-formattingcommalargenumber

解决方案


您将印度英语指定为区域设置 ( 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 千万卢比”,写成 3,00,00,000 卢比,用逗号在千位、十万位和千万位。

[...]

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

(强调我的。)

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


推荐阅读