

刚刚在开发的时候遇到的,这是为什么
解决方案
30
java的Double会存在精度丢失的问题,可以使用BigDecimal来进行运算:
BigDecimal a = new BigDecimal(Double.toString(33.3)); BigDecimal b = new BigDecimal(Double.toString(3)); //add(加),subtract(减),multiply(乘),divide(除) System.out.println(a.multiply(b).doubleValue());
20
float/double不能停供完全精确的计算结果。float和double一般用来作科学计算或是工程计算,但在商业计算中我们要用java.math.BigDecimal,通过使用BigDecimal类可以解决上述问题!补充一点,浮点数特别不适合用于货币计算。原因是浮点型不可能精确表示0.1或任何10的负数次幂的值。同样,假如计算的数字极大,或精度要求很高,都不应该用浮点进行计算。