Python 3.1 (r31:73574, Jun 26 2009, 20:21:35) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 2/2
1.0
Est-ce prévu? Je me souviens très bien du retour des versions antérieures int/int=int
? Que dois-je faire, y a-t-il un nouvel opérateur de division ou dois-je toujours caster?
python
integer
python-3.x
division
Jonas Byström
la source
la source
Réponses:
Jetez un œil à PEP-238 : Changer d'opérateur de division
la source
/
être une "erreur" de conception de langage qui devait être corrigée en Python 3. Cela a peut-être été une décision controversée, mais suffisamment de gens ont estimé que c'était la bonne. Comptez-moi dans le groupe qui aime le changement. C'est bien que nous puissions tous être d'accord pour ne pas être d'accord. À votre santé. :)Oups, trouvé immédiatement
2//2
.la source
J'espère que cela pourrait aider quelqu'un instantanément.
Comportement de l'opérateur de division dans Python 2.7 et Python 3
pour obtenir le résultat en double multiple 1.0 en "dividende ou diviseur"
la source
La réponse acceptée mentionne déjà PEP 238 . Je veux juste ajouter un rapide coup d'œil dans les coulisses pour ceux qui s'intéressent à ce qui se passe sans lire l'intégralité du PEP.
Opérateurs Python cartes comme
+
,-
,*
et/
à des fonctions spéciales, telles que par exemplea + b
est équivalent àEn ce qui concerne la division en Python 2, il n'y a par défaut que les
/
mappages__div__
et le résultat dépend des types d'entrée (par exempleint
,float
).Python 2.2 a introduit la
__future__
fonctionnalitédivision
, qui a changé la sémantique de division de la manière suivante (TL; DR de PEP 238):/
des cartes__truediv__
auxquelles doit "renvoyer une approximation raisonnable du résultat mathématique de la division" (citation du PEP 238)//
correspond à__floordiv__
, qui devrait renvoyer le résultat/
Avec Python 3.0, les modifications de PEP 238 sont devenues le comportement par défaut et il n'y a plus de méthode spéciale
__div__
dans le modèle objet de Python.Si vous souhaitez utiliser le même code dans Python 2 et Python 3, utilisez
et s'en tenir à la sémantique PEP 238 de
/
et//
.la source
Selon la documentation de Python3, python, lorsqu'il est divisé par un entier, générera un flottant bien qu'il soit censé être un entier.
Pour imprimer exclusivement des nombres entiers, utilisez
floor division method
. La division du sol arrondit zéro et supprime le point décimal.Represented by //
Par conséquent, au lieu de 2/2, utilisez
2//2
Vous pouvez également importer la division
__future__
indépendamment de l'utilisation de python2 ou python3.J'espère que ça aide!
la source