Ruby BigDecimal舍入错误

时间:2016-11-10 17:36:31

标签: ruby

在Ruby (x = 1/b * c)中做一些非常基本的十进制数学运算。

a = BigDecimal.new("1"); 
b = BigDecimal.new("0.8903"); 
c = BigDecimal.new("0.8903"); 
x = a / b * c; 
puts x

输出:0.9999999998379

为了排除问题,我将测试用例简化为一个小数(x = 1/b * b)

a = BigDecimal.new("1"); 
b = BigDecimal.new("0.8903"); 
x = a / b * b; 
puts x

输出:0.9999999998379

然而,将原始公式重新排列为x = c / b会给出正确答案。

a = BigDecimal.new("1"); 
b = BigDecimal.new("0.8903"); 
c = BigDecimal.new("0.8903"); 
x = c / b; 
puts x

输出:1.0

是什么导致了这个或者这是一个BigDecimal错误?

感谢评论告诉我浮点数学有什么问题,这就是为什么我使用BigDecimal而不是浮点数,除非BigDecimal也有同样的问题?

1 个答案:

答案 0 :(得分:1)

这与新BigDecimal对象的最大位数限制有关。

如果你使用4的限制,那么数学运算将会解决。

a = BigDecimal.new("1"); 
b = BigDecimal.new("0.8903"); 
c = BigDecimal.new("0.8903"); 
x = a.div(b, 4) * c; 
puts x

输出:0.8903

您可以找到有关限制here

的更多信息