大家想必都遇到过Bigcimal做乘法精度丢失的问题,如下:
BigDecimal a = new BigDecimal(3.5);
BigDecimal a1 = new BigDecimal(295.210);
System.out.println(a.multiply(a1).setScale(2, BigDecimal.ROUND_HALF_UP));
以上程序运行结果为:1033.23
计算器计算结果为:1033.235 四舍五入为:1033.24
造成以上的问题是因为float和double是不精确的运算,并不是因为BigDecimal的问题
不信的话可以执行以下代码:System.out.println(0.1*3);
问题找到了解决办法如下:
BigDecimal a = new BigDecimal(“3.5”);
BigDecimal a1 = new BigDecimal(“295.210”);
System.out.println(a.multiply(a1).setScale(2, BigDecimal.ROUND_HALF_UP));
网友评论