我试图计算'10 *(50/100)`并且我回到了'0`但是当我做'10 * 50 / 100`时我回到了'5`!

时间:2012-05-18 13:04:12

标签: ruby numbers

  

可能重复:
  Ruby Refuses to Divide Correctly

我正在使用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 )?

4 个答案:

答案 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 * percreturn (10 * perc).to_i