Par exemple:
9 / 5 #=> 1
mais je m'y attendais 1.8
. Comment obtenir le bon résultat décimal (non entier)? Pourquoi revient-il 1
du tout?
Par exemple:
9 / 5 #=> 1
mais je m'y attendais 1.8
. Comment obtenir le bon résultat décimal (non entier)? Pourquoi revient-il 1
du tout?
def method; a - b/8; end
retournerait simplement le résultat du calcul de la méthode, car la dernière expression dans un appel de méthode est la valeur de retour.Réponses:
Il fait une division entière. Vous pouvez créer l'un des nombres a
Float
en ajoutant.0
:la source
.to_f
réponse est meilleure si vous divisez deux variables contenant des entiers, par exemplea.to_f / b
. Si vous divisez littéralement deux entiers codés en dur (ce qui est probablement étrange), l'utilisation9.0 / 5
est très bien.Il fait une division entière. Vous pouvez utiliser
to_f
pour forcer les choses en mode virgule flottante:Cela fonctionne également si vos valeurs sont des variables plutôt que des littéraux. La conversion d'une valeur en un flottant est suffisante pour contraindre l'expression entière à l'arithmétique à virgule flottante.
la source
Il y a aussi la
Numeric#fdiv
méthode que vous pouvez utiliser à la place:la source
Vous pouvez le vérifier avec irb:
la source
Vous pouvez inclure le
mathn
module ruby .De cette façon, vous allez pouvoir faire la division normalement.
De cette façon, vous obtenez la division exacte (classe Rational) jusqu'à ce que vous décidiez d'appliquer une opération qui ne peut pas être exprimée comme rationnelle, par exemple
Math.sin
.la source
Remplacez
5
par5.0
. Vous obtenez une division entière.la source
Fixnum # to_r n'est pas mentionné ici, il a été introduit depuis ruby 1.9. Il convertit Fixnum en forme rationnelle. Voici des exemples de ses utilisations. Cela peut également donner une division exacte tant que tous les nombres utilisés sont Fixnum.
Exemple où un flotteur opéré sur un nombre rationnel couvre le résultat à flotter.
la source