减去浮点数时出现意外结果

时间:2012-12-04 15:41:07

标签: ruby

  

可能重复:
  ruby floating point errors

在Ruby中,当从5.0中减去4.7时,我希望结果为0.3,但得到:

~ $ irb
1.9.2p290 :001 > 5.0 - 4.7
 => 0.2999999999999998 

我猜这是有原因而不是它的错误?使用BigDecimal个对象会产生相同的结果。我唯一的选择是在结果上使用round吗?

2 个答案:

答案 0 :(得分:6)

浮动失去精确度。没有什么可以做的。所以,使用:

(5.0 - 4.7).round(1)

如果您需要更高的精确度:

(0.50 - 0.47).round(2)

答案 1 :(得分:1)

这不是一个错误。这是浮点算术的工作原理。更多详情:http://floating-point-gui.de/