0

我有一个案例,我在 Float 对象上做一些数学运算,当我在它上面调用 to_i 时,它被减少了一个。

value = 0.29 * 100
value.to_i
=> 28

我知道浮点数是不精确的表示,但这超出了我的预期。发生了什么事,我该如何预防?

我正在使用 ruby​​ 1.8.7(它也发生在 1.8.6 中)。

4

2 回答 2

6
(0.29 * 100).round
 => 29 

并非所有浮点数都是不精确的。29是准确的,0.25是准确的,但0.29不是。如果在小数点右侧缺少 50 位,则默认截断转换将返回下一个较低的整数。

这就是#round存在的原因。

于 2011-12-06T18:03:19.350 回答
3

快速检查 irb 显示0.29 * 100计算结果为28.999.... 其余Float#to_i的都跟注,你最终得到 28。

于 2011-12-06T17:58:51.117 回答