(0.6/0.2).to_i (0.6/0.2).to_f.to_i 不知道为什么
有什么奇怪的
#1 楼 @zkai 结果是 2
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 呢?
#9 楼 @liuxiang511240 巧合
这种情况你应该用 .round 不用 .to_i
.round
.to_i
#11 楼 @luikore 嗯,直接 to_i 会丢失精度
剖析 float 型的内存存储和精度丢失问题 http://hxraid.iteye.com/blog/504293