java中的数字格式使用Lakh格式而不是百万格式
我尝试过使用NumberFormat
和DecimalFormat
。 即使我使用的是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格式,你必须编写一些自定义代码。