我试过使用NumberFormat
and DecimalFormat
。即使我使用的是en-In
语言环境,数字也被格式化为西方格式。是否有任何选项可以将数字格式化为 lakhs 格式?
前 - 我想NumberFormatInstance.format(123456)
代替1,23,456.00
(123,456.00
例如,使用此维基百科页面上描述的系统)。
我试过使用NumberFormat
and DecimalFormat
。即使我使用的是en-In
语言环境,数字也被格式化为西方格式。是否有任何选项可以将数字格式化为 lakhs 格式?
前 - 我想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 格式,则必须编写一些自定义代码。