Ответ 1
Все возвращается правильно.
puts 8/3.ceil == 2
#=> true, because 8/3 returns an Integer, 2
puts 8/3.floor == 2
#=> true, because 8/3 returns an Integer, 2
puts 2.67.ceil == 2
#=> false, because 2.67.ceil is 3
puts 2.67.floor == 2
#=> true, because 2.67.floor is 2
Чтобы сделать это более понятным, вы можете преобразовать результаты в Float:
(8.to_f / 3).ceil == 2 #=> false
(8.to_f / 3).floor == 2 #=> true
2.67.ceil == 2 #=> false
2.67.floor == 2 #=> true
Еще одна вещь, которую нужно иметь в виду, что написание 8/3.ceil
на самом деле 8/(3.ceil)
, потому что .
связывает сильнее, чем /
. (спасибо @tadman)
Еще одна вещь, которую стоит упомянуть, это (спасибо @Stefan):
Там также
fdiv
для выполнения деления с плавающей запятой, т.е.8.fdiv(3).ceil
. И в Ruby также есть классRational
:(8/3r).ceil
.