我知道以下行为是一个老问题,但我仍然不明白。
System.out.println(0.1 + 0.1 + 0.1);
或者即使我使用BigDecimal
System.out.println(new BigDecimal(0.1).doubleValue()
+ new BigDecimal(0.1).doubleValue()
+ new BigDecimal(0.1).doubleValue());
为什么会出现这样的结果:0.30000000000000004
代替:0.3
?
我该如何解决这个问题?
你真正想要的是
new BigDecimal("0.1")
.add(new BigDecimal("0.1"))
.add(new BigDecimal("0.1"));
The new BigDecimal(double)
构造函数得到了所有的不精确性double
,所以当你说的时候0.1
,您已经引入了舍入误差。使用String
构造函数避免了与通过相关的舍入错误double
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)