Par exemple:
9 / 5 #=> 1
mais je m'attendais à 1.8
. Comment puis-je obtenir le bon résultat décimal (non entier)? Pourquoi renvoie-t-il 1
?
C’est la division entière. Vous pouvez faire l'un des nombres un Float
en ajoutant .0
:
9.0 / 5 #=> 1.8
9 / 5.0 #=> 1.8
C’est la division entière. Vous pouvez utiliser to_f
pour forcer les éléments en mode virgule flottante:
9.to_f / 5 #=> 1.8
9 / 5.to_f #=> 1.8
Cela fonctionne aussi si vos valeurs sont des variables au lieu de littéraux. La conversion d'une valeur en float suffit à contraindre l'expression entière à l'arithmétique en virgule flottante.
Il existe également la méthode Numeric#fdiv
que vous pouvez utiliser à la place:
_9.fdiv(5) #=> 1.8
_
Vous pouvez le vérifier avec irb:
$ irb
>> 2 / 3
=> 0
>> 2.to_f / 3
=> 0.666666666666667
>> 2 / 3.to_f
=> 0.666666666666667
Vous pouvez inclure le module Ruby mathn
.
require 'mathn'
De cette façon, vous pourrez faire la division normalement.
1/2 #=> (1/2)
(1/2) ** 3 #=> (1/8)
1/3*3 #=> 1
Math.sin(1/2) #=> 0.479425538604203
De cette façon, vous obtenez une division exacte (classe Rational) jusqu'à ce que vous décidiez d'appliquer une opération qui ne peut pas être exprimée sous la forme d'un rationnel, par exemple Math.sin
.
Changez le 5
en 5.0
. Vous obtenez une division entière.
Fixnum # to_r n'est pas mentionné ici, il a été introduit depuis Ruby 1.9. Il convertit Fixnum en une forme rationnelle. Vous trouverez ci-dessous des exemples d'utilisation. Cela peut aussi donner une division exacte tant que tous les nombres utilisés sont Fixnum.
a = 1.to_r #=> (1/1)
a = 10.to_r #=> (10/1)
a = a / 3 #=> (10/3)
a = a * 3 #=> (10/1)
a.to_f #=> 10.0
Exemple dans lequel un float opéré sur un nombre rationnel recouvre le résultat en float.
a = 5.to_r #=> (5/1)
a = a * 5.0 #=> 25.0