我正在使用Ruby on Rails 3.2.2,当我尝试计算10 * (50 / 100)
时,我回来了0
但是当我10 * 50 / 100
时,我回来了5
。< / p>
由于技术原因,我不能使用后者,因为我的代码如下:
perc = 50 /100
# Some code that uses the 'perc' variable
... = method_name(perc)
return 10 * perc
我应该如何解决问题,并5
(不 5.0
或其他内容;也就是说,返回值为Integer
)?
答案 0 :(得分:8)
50/100为0,因为您使用的是整数除法。结果被截断为整数。
首先执行乘法是有效的,因为除法给出了整数。
您可以使用浮点数而不是整数执行计算:50.0 / 100.0 == 0.5,然后在计算结束时将结果四舍五入为整数。
proportion = 50.0 / 100.0
result = (10 * proportion).round
return result
查看在线工作:ideone
答案 1 :(得分:2)
50/100将以整数除法返回0,如果你尝试50.0 / 100.0,你将得到.5。
答案 2 :(得分:1)
不熟悉Ruby,但我认为答案是按操作顺序排列的。
如果是10 * (50 / 100)
,程序会首先计算(50 / 100)
,结果为0.5
。由于您使用的是整数,因此将其四舍五入为0
,从而解释了为什么10 * (50 / 100) = 0
。
如果是10 * 50 / 100
,程序会首先计算10 * 50
,即500
。接下来,它将此结果除以100
,然后获得10 * 50 / 100 = 5
。
答案 3 :(得分:0)
问题的最后一部分是typecasting。
如果您希望return 10 * perc
而不是5.0获得5,那么您应该将其转换为整数,例如return (Integer) 10 * perc
或return (10 * perc).to_i