double精度失去精度问题的处理:
double sum = 1.1011111;
BigDecimal sum1 = new BigDecimal(sum);
double sum2 = sum1.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
System.out.println("sum2:" + sum2);
上述方法中,当遇到小数位后第三位为5时,有时候四舍五入的值并不准确!例如,sum=0.975的时候,我们会发现,输出的是0.97。
所以我们可以将代码修改为:
double sum = 0.975;
BigDecimal sum1 = BigDecimal.valueOf(sum);
double sum2 = sum1.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
System.out.println("sum2:" + sum2);
我们发现这时候,sum2的值变为了0.98。