250 votes

Pourquoi la division en Ruby renvoie-t-elle un nombre entier au lieu d'une valeur décimale ?

Par exemple :

9 / 5  #=> 1

mais je m'attendais 1.8 . Comment puis-je obtenir le résultat décimal (non entier) correct ? Pourquoi le système renvoie-t-il 1 du tout ?

345voto

mu is too short Points 205090

Il fait des divisions entières. Vous pouvez utiliser to_f pour forcer les choses en mode virgule flottante :

9.to_f / 5  #=> 1.8
9 / 5.to_f  #=> 1.8

Cela fonctionne également si vos valeurs sont des variables au lieu de littéraux. La conversion d'une valeur en un flottant est suffisante pour contraindre l'ensemble de l'expression à l'arithmétique à virgule flottante.

258voto

vees Points 981

Il fait des divisions entières. Vous pouvez faire d'un des nombres un Float en ajoutant .0 :

9.0 / 5  #=> 1.8
9 / 5.0  #=> 1.8

168voto

platzhirsch Points 10662

Il y a aussi le Numeric#fdiv que vous pouvez utiliser à la place :

9.fdiv(5)  #=> 1.8

39voto

Renaud Points 3226

Vous pouvez le vérifier avec irb :

$ irb
>> 2 / 3
=> 0
>> 2.to_f / 3
=> 0.666666666666667
>> 2 / 3.to_f
=> 0.666666666666667

26voto

Rok Kralj Points 11593

Vous pouvez inclure le fichier ruby mathn module.

require 'mathn'

De cette façon, vous allez pouvoir 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 comme un rationnel, par exemple Math.sin .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X