33.3*3=99.89999999999999,为什么

J2EE 码拜 8年前 (2017-04-17) 1674次浏览
33.3*3=99.89999999999999,为什么33.3*3=99.89999999999999,为什么
刚刚在开发的时候遇到的,这是为什么
解决方案

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的负数次幂的值。同样,假如计算的数字极大,或精度要求很高,都不应该用浮点进行计算。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明33.3*3=99.89999999999999,为什么
喜欢 (0)
[1034331897@qq.com]
分享 (0)