[英]DecimalFormat is not working properly
我正在尝试使用以下代码应用格式设置(在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
)。
Double的53位精度约为16位数字。
问题是您使用double
变量,并达到了最高精度
。 Double.MIN_VALUE
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));
OUTPUT:
Number : -54.125.412.512,2315
Number : -1.231.254.125.412.512,2315
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.