新手问题 碰到一个奇怪的问题,(0.6/0.2).to_i=?

heimirror · 2014年12月23日 · 最后由 liuxiang511240 回复于 2014年12月23日 · 2229 次阅读

(0.6/0.2).to_i (0.6/0.2).to_f.to_i 不知道为什么

有什么奇怪的

irb(main):001:0> 0.6 / 0.2
=> 2.9999999999999996
2.1.4 :001 > (0.6/0.2)
 => 2.9999999999999996

所以是 2

1.8.7 :002 > 0.6 / 0.2 => 3.0

为什么会是 2.9999999999999999996 呢

找到答案了,浮点数本来就不准,浮点数其实是真实数的近似

这和 irb 的版本有关,比如:

irb 0.9.6(09/06/30)
0.6/0.2 =>2.9999999999999996
irb 0.9.5(05/04/13)
0.6/0.2 => 3.0

为什么 (0.8/0.2).to_i=4 呢?

这种情况你应该用 .round 不用 .to_i

#11 楼 @luikore 嗯,直接 to_i 会丢失精度

剖析 float 型的内存存储和精度丢失问题 http://hxraid.iteye.com/blog/504293

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