Ruby 减去浮点数时出现意外结果
可能重复:Ruby 减去浮点数时出现意外结果,ruby,Ruby,可能重复: 在Ruby中,当从5.0中减去4.7时,我预期结果为0.3,但得到: ~ $ irb 1.9.2p290 :001 > 5.0 - 4.7 => 0.2999999999999998 我猜这是有原因的,而不是一个bug?使用BigDecimal对象可以得到相同的结果。在结果上使用舍入是我唯一的选择吗?浮动会失去精度。对此无能为力。因此,请使用: (5.0 - 4.7).round(1) 如果您需要更高的精度: (0.50 - 0.47).round(2) 浮动
在Ruby中,当从5.0中减去4.7时,我预期结果为0.3,但得到:
~ $ irb
1.9.2p290 :001 > 5.0 - 4.7
=> 0.2999999999999998
我猜这是有原因的,而不是一个bug?使用
BigDecimal
对象可以得到相同的结果。在结果上使用舍入是我唯一的选择吗?浮动会失去精度。对此无能为力。因此,请使用:
(5.0 - 4.7).round(1)
如果您需要更高的精度:
(0.50 - 0.47).round(2)
浮动会失去精度。对此无能为力。因此,请使用:
(5.0 - 4.7).round(1)
如果您需要更高的精度:
(0.50 - 0.47).round(2)
这不是虫子。这就是浮点算法的工作原理。这里有更多详细信息:这不是一个bug。这就是浮点算法的工作原理。这里的更多细节:Ah,使用带字符串的BigDecimal作为参数可以得到我想要的:(BigDecimal.new('5.0')-BigDecimal('4.7'))。to_f
,而不是(BigDecimal.new(5.0,0)-BigDecimal(4.7,0))。to_f
Ah,使用带字符串的BigDecimal作为参数可以得到我想要的:(BigDecimal.new('5.0')-BigDecimal>)('4.7')。到_f
,但不是(BigDecimal.new(5.0,0)-BigDecimal(4.7,0))谢谢你的链接,我知道这与Float的工作原理有关,但不完全是因为什么。我会看一看。谢谢你的链接,我知道这与Float的工作原理有关,但不完全是因为什么。我会看一看。我想我需要这样做,谢谢你的确认!我想我需要这样做,谢谢你的确认激动!