在Java中,我注意到1.1+(2.2*(3.3+4.4))
导致18.040000000000003
而不是18.04
。有没有办法防止这种情况发生?
答案 0 :(得分:3)
这是使用浮点运算的结果,您有两个选择:
Math.round
该操作的结果,但我猜这不是你想要的。java.math.BigDecimal
(任意精度小数),允许您存储这些小数而不会损失精度。答案 1 :(得分:1)
如果您的目标需要精确计算并完全控制精度,那么我建议使用BigDecimal
类。 BigDecimal允许通过设置除法点之后的位数,舍入模式以及接受MathContext作为参数来设置非常精确的计算规则。
但是有一些缺点。首先,BigDecimal
是对象,因此所有操作都是通过方法完成的,而不是使用标准数学运算符。这有点麻烦,特别是在构建更复杂的表达式时,如果不仔细可能会导致一些讨厌的,不清楚的代码。其次,正如所说的,所有操作都是在对象上完成的,它们在资源方面更为重要。