2012-05-18 89 views
-4

可能重复:
Ruby Refuses to Divide Correctly我试图计算`10 *(50/100)`,我回到`0`,但是当我做了`10 * 50/100`时,我回到了`5`!

我使用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 

我应该怎么做来解决问题,并有55.0或别的东西;那是,所以回报是Integer)?

回答

8

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

首先执行乘法运算,因为除法给出了整数。

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

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

看到它联机工作:ideone

+0

这么快! +1 :) – apneadiving

+0

@Mark Byers - 我知道,但是我怎么能解决这个问题,因为技术原因,它必须返回5? – user12882

+0

'50.0/100'会缩短:D – fl00r

2

50/100将在整数除法返回0,如果你试图50.0/100.0,您将获得0.5。

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

0

您的问题的最后一部分是关于typecasting

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

相关问题