-4

可能的重复:
Ruby 拒绝正确划分

我正在使用 Ruby on Rails 3.2.2,当我尝试计算时10 * (50 / 100)我回来了,0但是当我让10 * 50 / 100我回来时5

由于技术原因,我不能使用后者,因为我的代码如下:

perc = 50 /100

# Some code that uses the 'perc' variable
... = method_name(perc)

return 10 * perc

我应该做些什么来解决问题并拥有5不是 5.0或其他东西;也就是说,回报是一个Integer)?

4

4 回答 4

8

50 / 100 为 0,因为您使用的是整数除法。结果被截断为整数。

首先执行乘法,因为然后除法给出一个整数。

您可以使用浮点数而不是整数执行计算:50.0 / 100.0 == 0.5,然后在计算结束时将结果四舍五入为整数。

proportion = 50.0 / 100.0
result = (10 * proportion).round
return result

在线查看它:ideone

于 2012-05-18T13:05:16.523 回答
2

50/100 将在整数除法中返回 0,如果您尝试 50.0/100.0,您将得到 0.5。

于 2012-05-18T13:05:44.183 回答
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

于 2012-05-18T13:08:01.057 回答
0

您问题的最后一部分是关于类型转换

如果你想得到 5 作为结果return 10 * perc而不是 5.0,那么你应该将它转换为整数,比如return (Integer) 10 * percreturn (10 * perc).to_i

于 2012-05-18T13:23:09.510 回答