Ruby on Rails - BigDecimal计算错误

时间:2015-11-05 22:43:39

标签: ruby-on-rails ruby

首先,数据库表中的列是DECIMAL,长度为10,4

如果我在控制台甚至控制器中执行此操作,结果是正确的:

rate = (1 / 0.7126) * 1.0883

但如果我这样做,它就不起作用了:

rate = (1 / from_rate) * to_rate

结果只是to_rate

的值

from_rateto_rate是数据库查询的结果,值是正确的,如果我使用.class记录类,结果是BigDecimal,所以我没有想法为什么这个计算不能按预期工作。

我尝试使用to_dBigDecimal.new明确转换,但它们似乎没有什么区别。

1 个答案:

答案 0 :(得分:1)

从证据来看,整数除法实例方法(由/调用,因为(1 / from_rate)在参数(除数)为BigDecimal时返回整数结果,所以在这种情况下它是&#39 ; s返回整数值1。当参数是浮点数时,这不是问题,因为整数除法确实返回浮点数。

你可以通过使用浮动除数来绕过这个问题...通过指定1.0(一个浮点数)作为被除数来做到这一点。

rate = (1.0 / from_rate) * to_rate

或者您可以将from_rate值转换为浮点数。

rate = (1 / from_rate.to_f) * to_rate