繁体   English   中英

DecimalFormat无法正常工作

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM