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-US
或 en-UK
而不是 en-IN
。
【讨论】:
天哪,非常感谢!我怀疑它与该代码有关,但我在任何地方都找不到英语的不同选项。谢谢!以上是关于Intl.NumberFormat 没有做数百万正确的主要内容,如果未能解决你的问题,请参考以下文章
Intl.NumberFormat#format 最大整数值
如何将 Intl.NumberFormat 与本机反应一起使用?
使用不带货币符号的 Intl.NumberFormat 进行货币格式化