Je suis nouveau sur Ruby et j'essaie de comprendre comment ceil
et floor
fonctionne car j'obtiens des réponses différentes lorsqu'une fraction ou un nombre décimal est utilisé (valeur similaire). Voici ce que j'ai essayé:
puts 8/3.ceil == 2 #=> true
puts 8/3.floor == 2 #=> true
puts 2.67.ceil == 2 #=> false
puts 2.67.floor == 2 #=> true
D'après ma compréhension, ceil
devrait renvoyer un nombre supérieur et floor
est un nombre inférieur. J'espère que quelqu'un pourra m'éclairer à ce sujet. Merci! :)
Tout est retourné correctement.
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
Pour donner plus de sens ici, vous pouvez convertir les résultats en flottant:
(8.to_f / 3).ceil == 2 #=> false
(8.to_f / 3).floor == 2 #=> true
2.67.ceil == 2 #=> false
2.67.floor == 2 #=> true
Une autre chose à garder à l'esprit, qu'avoir écrit 8/3.ceil
Est en fait 8 / (3.ceil)
, parce que .
Se lie plus fort que /
. (thx @ tadman )
Encore une autre chose à mentionner, c'est que (thx @ Stefan ):
Il y a aussi
fdiv
pour effectuer une division en virgule flottante, c'est-à-dire8.fdiv(3).ceil
. Et Ruby est également livré avec une classe NiceRational
:(8/3r).ceil
.