2009-05-19 3 views
40

Я хотел бы «накрыть» номер в Ruby (on Rails).Как колпачок и круглый номер в рубине

Например, у меня есть в результате функции float, но мне нужен int.

У меня есть очень конкретные инструкции, вот несколько примеров:

Если я получаю 1.5 я хочу 2, но если я получаю 2.0 я хочу 2 (а не 3)

Ведение number.round(0) + 1 не будет работать.

Я мог бы написать функцию для этого, но я уверен, что он уже существует.

Если, тем не менее, его не существует, где я должен создать свою функцию кепки?

ответ

11

Как насчет number.ceil?

Это возвращает наименьшее целое число, большее или равное числу.

Будьте осторожны, если вы используете это с отрицательными числами, убедитесь, что он делает то, что вы ожидаете:

1.5.ceil  #=> 2 
2.0.ceil  #=> 2 
(-1.5).ceil #=> -1 
(-2.0).ceil #=> -2 
6

Использование Numeric#ceil:

irb(main):001:0> 1.5.ceil 
=> 2 
irb(main):002:0> 2.0.ceil 
=> 2 
irb(main):003:0> 1.ceil 
=> 1 
2

float.ceil - это то, что вы хотите для положительных чисел. Обязательно рассмотрите поведение для отрицательных чисел. То есть, вы хотите, чтобы -1.5 «закрывал» до -1 или -2?

11

.ceil хорошо, но помните, что даже наименьшее значение в поплавок будет вызывать это:

a = 17.00000000000002 
17.0 
a.ceil 
18 
Смежные вопросы