首先,数据库表中的列是DECIMAL
,长度为10,4
。
如果我在控制台甚至控制器中执行此操作,结果是正确的:
rate = (1 / 0.7126) * 1.0883
但如果我这样做,它就不起作用了:
rate = (1 / from_rate) * to_rate
结果只是to_rate
。
from_rate
和to_rate
是数据库查询的结果,值是正确的,如果我使用.class
记录类,结果是BigDecimal
,所以我没有想法为什么这个计算不能按预期工作。
我尝试使用to_d
和BigDecimal.new
明确转换,但它们似乎没有什么区别。
答案 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