2014-08-28 56 views
33

我觉得自己像一个疯狂的人。我想将所有分数舍入到最接近的整数。红宝石总是四舍五入

例如,三十〇分之六十七= 2.233333333334。如果结果不是一个完整的数字,我不想总结,只能向上。

这就是我想:的

puts 67/30.to_f.ceil 

这里的例子就是我在寻找:

  • 三十〇分之六十七= 3
  • 50/100 = 1
  • 2/2 = 1

任何想法?非常感谢!

+0

最好不要有不必要的标签(这里的Rails)。这是一个消磨时间对于那些只在Rails的问题,那些谁滤掉的Rails问题将错过这可能是他们感兴趣的一个问题感兴趣。 – 2014-08-28 08:32:08

+2

另一种方法:'(67 + 30-1)/ 30 => 3' – 2014-08-28 08:38:55

回答

73

的问题是,你目前正在呼吁30.to_fceil。这里的Ruby是如何评价它:

(67)/(30.to_f.ceil) 
# .ceil turns the float into an integer again 
(67)/(30.0.ceil) 
# and now it's just an integer division, which will be 2 
67/30 # = 2 

为了解决这个问题,你可以加括号:

puts (67/30.to_f).ceil # = 3 
+0

意思.ceil方法在'67/30.0.ceil'而不是执行实际的小区转换'30.0'到'30'? – Rahul 2014-08-28 07:16:20

+0

你摇滚!非常感谢!! – Brandon 2014-08-28 07:17:41

+3

@Rahul它的意思是,原始表达式实际上被评估为“(67)/(30.to_f.ceil)”,它破坏了整个想法。 – 2014-08-28 07:17:43