Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 减去浮点数时出现意外结果_Ruby - Fatal编程技术网

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的工作原理有关,但不完全是因为什么。我会看一看。我想我需要这样做,谢谢你的确认!我想我需要这样做,谢谢你的确认激动!