138 votes

Division python

Quelqu'un peut-il m'expliquer cela? J'ai essayé de normaliser un ensemble de nombres à partir de -100 à 0 pour une gamme de 10 à 100 et avait des problèmes seul à remarquer que, même avec l'absence de variables à tous, ce n'est pas d'évaluer la façon dont je voudrais attendre d'elle:

>>> (20-10) / (100-10)
0

EDIT: float division ne fonctionne pas non plus:

>>> float((20-10) / (100-10))
0.0

EDIT: si chaque côté de la division est converti en float, il va travailler

>>> (20-10) / float((100-10))
0.1111111111111111

De chaque côté dans le premier exemple est l'évaluation comme un int ce qui signifie que la réponse finale sera convertie en un entier (int). Depuis 0.111 est à moins de 5, il est arrondi à 0. N'est pas transparent à mon avis, mais je suppose que c'est la façon dont il est.

247voto

KennyTM Points 232647

Vous utilisez Python 2.x, où les divisions entières seront tronquées au lieu de devenir un nombre à virgule flottante.

 >>> 1 / 2
0
 

Vous devriez en faire un float :

 >>> float(10 - 20) / (100 - 10)
-0.1111111111111111
 

ou from __future__ import division , ce qui oblige / à adopter le comportement de Python 3.x qui renvoie toujours un float.

 >>> from __future__ import division
>>> (10 - 20) / (100 - 10)
-0.1111111111111111
 

21voto

Dave Webb Points 90034

Vous êtes à la mise Entiers dans Python est de vous donner un entier de retour:

>>> 10 / 90
0

Si vous lancez ce à un flotteur par la suite l'arrondissement ont déjà été réalisées, en d'autres termes, 0 entier y aura toujours des 0 flotteur.

Si vous utilisez des flotteurs de chaque côté de la division Python va vous donner la réponse que vous attendez.

>>> 10 / 90.0
0.1111111111111111

Donc dans votre cas:

>>> float(20-10) / (100-10)
0.1111111111111111
>>> (20-10) / float(100-10)
0.1111111111111111

11voto

A. Levy Points 8344

Vous devez le changer en float AVANT de faire la division. C'est:

 float(20 - 10) / (100 - 10)
 

4voto

billmanH Points 13

Spécifier un float en plaçant un '.' après que le nombre le fera également flotter par défaut.

 >>> 1 / 2
0

>>> 1. / 2.
0.5
 

2voto

unbeli Points 9573

Faites en sorte qu'au moins l'un d'eux flotte, alors ce sera une division flottante, pas un entier:

 >>> (20.0-10) / (100-10)
0.1111111111111111
 

Il est trop tard pour lancer le résultat.

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