作者:fyupeng
技术专栏:☞ https://github.com/fyupeng
项目地址:☞ https://github.com/fyupeng/distributed-blog-system-api
留给读者
对于这种计算,怎么看待,是否一定得使用精度四舍五入计算?
System.out.println(Double.sum(-14.88, 64.88));
控制台打印:
49.99999999999999
Process finished with exit code 0
由于以上使用的非Java
标准库,现在使用标准库。
BigDecimal num1 = new BigDecimal("-14.88");
BigDecimal num2= new BigDecimal("64.88");
BigDecimal sum = num1.add(num2);
System.out.println(sum); // 保留10位小数,四舍五入
System.out.println(sum.round(new MathContext(10, RoundingMode.HALF_UP))); // 保留10位小数,四舍五入
// 或者,如果您知道结果应该是一个整数,并且想要得到一个整数结果:
System.out.println(sum.setScale(0, RoundingMode.HALF_UP)); // 去掉小数部分,四舍五入到最接近的整数
控制台打印:
50.00
50.00
50
可以看到,不管是原值计算后输出,还是减少精度,得到的结果小数位数能够得到高保真。
高效、实践、务实,求真!