DecimalFormat无法正常工作

时间:2016-06-28 08:26:45

标签: java

我正在尝试应用格式化(经过3位数字和四位数后的舍入),使用下面的代码 -

double a = 1231254125412512.231515235346;
NumberFormat formatter = new DecimalFormat("#,###");
formatter.setRoundingMode(RoundingMode.HALF_UP);
formatter.setMinimumFractionDigits(4);
formatter.setMaximumFractionDigits(4);
System.out.println("Number : " + formatter.format(a));

以上代码适用于号码-54125412512.231515235346(结果为-54,125,412,512.2315)。

但它不适用于数字-1231254125412512.231515235346(结果-1,231,254,125,412,512.2000)。

2 个答案:

答案 0 :(得分:2)

Double的精度为53位,约为16位。

答案 1 :(得分:1)

问题是你使用double变量,然后点击最大精度 Double.MIN_VALUE

SOURCE:

  

double:64位(8字节)其中 52位用于尾数(15到17位小数,平均大约16位)。 11位用于指数,1位用于符号位。

要避免此问题,请改用BigDecimal

BigDecimal a = new BigDecimal("-54125412512.231515235346");
BigDecimal b = new BigDecimal("-1231254125412512.231515235346");

NumberFormat formatter = new DecimalFormat("#,###");
formatter.setRoundingMode(RoundingMode.HALF_UP);
formatter.setMinimumFractionDigits(4);
formatter.setMaximumFractionDigits(4);
System.out.println("Number : " + formatter.format(a));
System.out.println("Number : " + formatter.format(b));

输出:

Number : -54.125.412.512,2315
Number : -1.231.254.125.412.512,2315