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

时间:2013-01-24 17:55:38

标签: java formatting

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

前 - 我希望NumberFormatInstance.format(123456)提供1,23,456.00而不是123,456.00(例如,使用this Wikipedia page中描述的系统)。

3 个答案:

答案 0 :(得分:8)

由于标准化的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

答案 1 :(得分:6)

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

import com.ibm.icu.text.DecimalFormat;

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

答案 2 :(得分:2)

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

来自documentation

  

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

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