新手问题 Float 相加问题

weeweee · 2013年05月15日 · 最后由 weeweee 回复于 2013年05月16日 · 2847 次阅读

在 1.8.7 版本上,为什么这些语句里,有几条在执行的时候会出现 false?而且 divmod 的结果会有余数?觉得好费解呀

1.55.divmod(1.525+0.025) => [1, 2.22044604925031e-16] 1.54.divmod(1.515+0.025) => [1, 2.22044604925031e-16] 1.499+0.001==1.5 => true 1.499+0.011==1.51 => true 1.499+0.021==1.52 => true 1.499+0.031==1.53 => true 1.499+0.041==1.54 => true 1.499+0.051==1.55 => true 1.5+0.05==1.55 => true 1.52+0.03==1.55 => true 1.525+0.025==1.55 => false 1.529+0.021==1.55 => false 1.530+0.020==1.55 => true

2.0.0p0 :001 > 1.525 + 0.025
 => 1.5499999999999998

因为是 float,所以不精确吧

float 不能直接做相等判断 要加个精度

BigDecimal计算浮点数的运算才是王道

感觉不全是这样,如果是小数位不准确的话,下买呢的语句也应该是 false 才对。这个才是让人费解的地方 1.499+0.021==1.52 => true 1.499+0.031==1.53 => true 1.499+0.041==1.54 => true 1.499+0.051==1.55 => true

需要 登录 后方可回复, 如果你还没有账号请 注册新账号