2014-08-28 5 views
33

Я чувствую себя сумасшедшим человеком. Я бы хотел объединить все фракции до ближайшего целого числа.Ruby Always Round Up

Например, 67/30 = 2.233333333334. Я хотел бы объединить это до 3. Если результат не является целым числом, я никогда не хочу округлять, только вверх.

Это то, что я пытаюсь:

puts 67/30.to_f.ceil 

Вот примеры того, что я ищу:

  • 67/30 = 3
  • 50/100 = 1
  • 2/2 = 1

Любые идеи? Большое спасибо!

+0

Лучше не иметь ненужных тегов (здесь Rails). Это время для тех, кто интересуется только вопросами Rails, те, кто отфильтровывает вопросы Rails, упускают вопрос, который может быть им интересен. –

+2

Другой способ: '(67 + 30-1)/30 => 3' –

ответ

73

Проблема в том, что вы в настоящее время звоните ceil по телефону 30.to_f. Вот как рубин оценивает его:

(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 преобразует' 30.0' в '30' в' 67/30.0.ceil' вместо того, чтобы выполнять фактический уровень? – Rahul

+0

вы рок! Огромное спасибо!! – Brandon

+3

@Rahul Это означает, что исходное выражение фактически оценивается как '(67)/(30.to_f.ceil)', которое побеждает всю идею. –

Смежные вопросы