浮点除法的结果不同

时间:2015-06-22 06:46:19

标签: ruby floating-point

为什么下面的每个计算中的最后一位数字都不同?它们不应该是一样的吗?

<div class="positioning">
   //Content
</div>

2 个答案:

答案 0 :(得分:3)

浮点数不能精确地表示所有实数,并且浮点运算不能精确地表示真正的算术运算,这会导致许多令人惊讶的情况。

我建议阅读:https://en.wikipedia.org/wiki/Floating_point#Accuracy_problems

您可以使用BigDecimal代替浮点数

来解决大多数问题
require 'bigdecimal'
BigDecimal.new(  '1.0') / 3    #=>  0.333333333333333333
BigDecimal.new( '10.0') / 3    #=>  3.333333333333333333
BigDecimal.new('100.0') / 3    #=> 33.333333333333333333

答案 1 :(得分:1)

1.0/3 * 10 == 10.0/3 # => false

Floats是不准确的,因此,在当前版本的Ruby中,简化了Rational的使用:

1/3r * 10 == 10/3r # => true