2012-12-04 66 views
1

可能重复:
ruby floating point errors意外的结果,当减去浮动

在Ruby中,减去4.7 5.0的时候,我希望0.3的结果,但得到:

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

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

+0

啊,用BigDecimal与一个字符串作为参数得到我什么,我想:'(BigDecimal.new( '5.0') - 的BigDecimal( '4.7'))to_f',但不是'( BigDecimal.new(5.0,0) - BigDecimal(4.7,0))。to_f' – james246

回答

5

浮球失去精度。对此没有什么可以做的。因此,使用方法:

(5.0 - 4.7).round(1) 

,如果你有需要更精确:

(0.50 - 0.47).round(2) 
+0

图我需要这样做,谢谢您的确认! – james246

1

这不是一个错误。这就是浮点运算的工作原理。更多细节在这里:http://floating-point-gui.de/

+0

感谢您的链接,我知道这与Float的工作原理有关,但不完全是为什么。会给它一个阅读。 – james246