在Ruby中,减去4.7 5.0的时候,我希望0.3的结果,但得到:
~ $ irb
1.9.2p290 :001 > 5.0 - 4.7
=> 0.2999999999999998
我猜这是有原因的,而不是一个错误?使用BigDecimal
对象会得到相同的结果。我的唯一选择是在结果上使用round
吗?
在Ruby中,减去4.7 5.0的时候,我希望0.3的结果,但得到:
~ $ irb
1.9.2p290 :001 > 5.0 - 4.7
=> 0.2999999999999998
我猜这是有原因的,而不是一个错误?使用BigDecimal
对象会得到相同的结果。我的唯一选择是在结果上使用round
吗?
浮球失去精度。对此没有什么可以做的。因此,使用方法:
(5.0 - 4.7).round(1)
,如果你有需要更精确:
(0.50 - 0.47).round(2)
图我需要这样做,谢谢您的确认! – james246
这不是一个错误。这就是浮点运算的工作原理。更多细节在这里:http://floating-point-gui.de/
感谢您的链接,我知道这与Float的工作原理有关,但不完全是为什么。会给它一个阅读。 – james246
啊,用BigDecimal与一个字符串作为参数得到我什么,我想:'(BigDecimal.new( '5.0') - 的BigDecimal( '4.7'))to_f',但不是'( BigDecimal.new(5.0,0) - BigDecimal(4.7,0))。to_f' – james246