我有一个关于格式化卢比货币(印度卢比 - INR)的问题。
通常像 450500
这样的值被格式化并显示为 450,500
。在印度,相同的值显示为 4,50,500
例如,这里的数字表示为:
1
10
100
1,000
10,000
1,00,000
10,00,000
1,00,00,000
10,00,00,000
参考 印度编号系统
分隔符位于两位数之后,但最后一组除外,它以千为单位。
我在互联网上搜索过,有人要求使用语言环境 en_GB
或模式 #,##,##,##,##0.00
我通过使用以下标记在 JSTL 上进行了尝试:
<fmt:formatNumber value="${product.price}" type="currency"
pattern="#,##,##,##,###.00"/>
但这似乎并不能解决问题。
原文由 Mihir 发布,翻译遵循 CC BY-SA 4.0 许可协议
不幸的是,在标准 Java SE 上
DecimalFormat
不支持可变宽度组。因此它永远不会完全按照您的意愿格式化值:Java 中的大多数数字格式化机制都基于该类,因此继承了这个缺陷。
ICU4J( Unicode 国际组件 的 Java 版本)提供了一个支持这种格式的 —
NumberFormat
类:此代码将产生此输出:
注意:
com.ibm.icu.text.NumberFormat
类 不 扩展java.text.NumberFormat
类(因为它已经扩展了ICU内部基类),但是 它 扩展了java.text.Format
类其中有format(Object)
方法。请注意, Android 版本 的
java.text.DecimalFormat
类是在后台使用 ICU 实现的,并且以与 ICU 类 本身 相同的方式支持该功能(即使摘要错误地提到它 _不受支持_)。