我在一个grails项目中发生了这个奇怪的除法错误(但我认为grails与它无关,我认为是一个groovy或java问题):
如果在常规控制台中我运行这个
float money = -1.30
float r = 0.01
println ((money/r).class.name)
println ((money/r).floatValue())
println ((money/r).toString() )
我得到这个输出
java.lang.Double
-130.0
-129.99999813735482
groovy 中的浮点除法给我一个 Double,这是正确的,但是
为什么 Double toString() 给我一个如此奇怪的值“-129.99999813735482”并且
不是正确的“-130.0”?
来自浮点指南:
为什么我的数字(例如 0.1 + 0.2)加起来不等于 0.3,并且
相反,我得到了一个奇怪的结果,例如 0.30000000000000004?
因为在内部,计算机使用一种格式(二进制浮点)
根本无法准确表示 0.1、0.2 或 0.3 这样的数字。
当代码被编译或解释时,你的“0.1”已经是
四舍五入到该格式中最接近的数字,这会导致一个小的
即使在计算发生之前也会出现舍入误差。
具体来说,1.3和0.01都不能准确地用a来表示。float
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)