java中的数字格式使用Lakh格式而不是百万格式

我尝试过使用NumberFormatDecimalFormat 。 即使我使用的是en-In语言环境,数字也会以西方格式进行格式化。 有没有选项来格式化数字格式的数字呢?

例如 – 我希望NumberFormatInstance.format(123456)给出1,23,456.00而不是123,456.00 (例如,使用本维基百科页面上描述的系统)。

由于标准化Java格式化器是不可能的,我可以提供自定义格式化程序

 public static void main(String[] args) throws Exception { System.out.println(formatLakh(123456.00)); } private static String formatLakh(double d) { String s = String.format(Locale.UK, "%1.2f", Math.abs(d)); s = s.replaceAll("(.+)(...\\...)", "$1,$2"); while (s.matches("\\d{3,},.+")) { s = s.replaceAll("(\\d+)(\\d{2},.+)", "$1,$2"); } return d < 0 ? ("-" + s) : s; } 

产量

 1,23,456.00 

虽然标准Java数字格式化程序无法处理此格式,但ICU4J中的DecimalFormat类可以。

 import com.ibm.icu.text.DecimalFormat; DecimalFormat f = new DecimalFormat("#,##,##0.00"); System.out.println(f.format(1234567)); // prints 12,34,567.00 

DecimalFormat无法使用这种格式。 它只允许分组分隔符之间的固定位数。

从文档 :

分组大小是分组字符之间的固定位数,例如3表示100,000,000或4表示1,0000,0000。 如果提供具有多个分组字符的模式,则最后一个和整数结尾之间的间隔是使用的间隔。 所以“#,##,###,####”==“######,####”==“##,####,####”。

如果你想获得Lakhs格式,你必须编写一些自定义代码。