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

heimirror · December 23, 2014 · Last by liuxiang511240 replied at December 23, 2014 · 2229 hits

(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

You need to Sign in before reply, if you don't have an account, please Sign up first.