1

我在 Rails 3.2.3 和 ruby​​ 1.9.3p362 中使用 BigDecimal 时遇到问题,
以下数字比较序列输出荒谬的结果

1.9.3-p362 :060 >   b = BigDecimal.new('620.56')
=> #<BigDecimal:68665e0,'0.62056E3',18(18)>

1.9.3-p362 :061 > b <= 620.56
=> false
1.9.3-p362 :062 > b > 620.56
=> true

1.9.3-p362 :063 > (b - 620.56) > 0
=> false
1.9.3-p362 :064 > (b - 620.56) == 0
=> true

换句话说,这说明:

B > A 

B - A == 0 

我错过了什么?

4

1 回答 1

1

欢迎来到浮点运算的美妙世界。

这个网站很好地介绍了如何以及为什么(首先检查基本答案),但归根结底是:

当涉及到浮点数时,计算机不是很准确。舍入错误无处不在,所以你必须小心你所做的事情。

于 2013-11-06T20:52:54.347 回答