8

我试过使用NumberFormatand DecimalFormat。即使我使用的是en-In语言环境,数字也被格式化为西方格式。是否有任何选项可以将数字格式化为 lakhs 格式?

前 - 我想NumberFormatInstance.format(123456)代替1,23,456.00123,456.00例如,使用此维基百科页面上描述的系统)。

4

3 回答 3

10

由于标准的 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
于 2013-01-24T21:16:31.473 回答
7

虽然标准的 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
于 2013-01-24T22:17:53.647 回答
2

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

文档中:

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

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

于 2013-01-24T18:01:40.653 回答