我尝试过使用NumberFormat
和DecimalFormat
。即使我使用en-In
语言环境,数字也会以西方格式进行格式化。是否有任何选项可以格式化数字格式的数字?
前 - 我希望NumberFormatInstance.format(123456)
提供1,23,456.00
而不是123,456.00
(例如,使用this Wikipedia page中描述的系统)。
答案 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
无法使用这种格式。它只允许分组分隔符之间的固定位数。
分组大小是分组之间的固定位数 字符,例如3表示100,000,000或4表示1,0000,0000。如果你 提供具有多个分组字符的模式,间隔 在整数的最后一个和结尾之间是那个 用过的。所以“#,##,###,####”==“######,####”==“##,####,####”。
如果你想获得Lakhs格式,你必须编写一些自定义代码。