以印度数字格式显示货币

新手上路,请多包涵

我有一个关于格式化卢比货币(印度卢比 - 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 许可协议

阅读 979
2 个回答

不幸的是,在标准 Java SE 上 DecimalFormat 不支持可变宽度组。因此它永远不会完全按照您的意愿格式化值:

如果您提供具有多个分组字符的模式,则使用最后一个字符和整数末尾之间的间隔。所以 "#,##,###,####" == "######,####" == "##,####,####"

Java 中的大多数数字格式化机制都基于该类,因此继承了这个缺陷。

ICU4J( Unicode 国际组件 的 Java 版本)提供了一个支持这种格式的 — NumberFormat 类:

 Format format = com.ibm.icu.text.NumberFormat.getCurrencyInstance(new Locale("en", "in"));
System.out.println(format.format(new BigDecimal("100000000")));

此代码将产生此输出:

 10,00,00,000.00 卢比

注意: com.ibm.icu.text.NumberFormat 扩展 java.text.NumberFormat 类(因为它已经扩展了ICU内部基类),但是 扩展了 java.text.Format 类其中有 format(Object) 方法。

请注意, Android 版本java.text.DecimalFormat 类是在后台使用 ICU 实现的,并且以与 ICU 类 本身 相同的方式支持该功能(即使摘要错误地提到它 _不受支持_)。

原文由 Joachim Sauer 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题