2008-10-08 6 views

Répondre

362

En Python 3.0, 5/2 retournera 2.5 et 5 // 2 retournera 2. La première est la division en virgule flottante, et la dernière est la division du plancher, parfois aussi appelée division entière.

En Python 2.2 ou plus tard dans la ligne 2.x, il n'y a pas de différence pour les entiers à moins que vous effectuez une from __future__ import division, ce qui provoque Python 2.x d'adopter le comportement de 3,0

Quelle que soit l'importation future, 5.0 // 2 renverra 2.0 puisque c'est le résultat de division de l'opération.

Vous trouverez une description détaillée à https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator

+2

Vous pouvez faire 'from __future__ import division' dans python 2.5. –

+0

Bon point; J'ai mis à jour ma réponse pour dire "2.5 ou plus tard". –

+2

Maintenant, il n'est pas correct que "Dans Python 2.5 ou plus tard, il n'y a pas de différence pour les entiers ..." parce que 3.0 * est * plus tard que 2.5 :) – ShreevatsaR

0

// est la division étage, il vous donnera toujours le sol entier du résultat. L'autre est la division «régulière».

3

La double barre oblique, //, est la division étage:

>>> 7//3 
2 
19

// outils "division sol", quel que soit votre type. Donc 1.0/2.0 donnera 0.5, mais les deux 1/2, 1//2 et 1.0//2.0 donneront 0.

Voir https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator pour plus de détails

+0

Ceci est une bonne réponse. Le lien PEP est utile. En outre, pensez à utiliser 'math.floor()' ou 'math.fmod()' si vous n'êtes pas sûr de ce qui se passe avec les opérateurs unaires. –

19

Comme tout le monde a déjà répondu, // est division de plancher. Pourquoi cela est important est que // est sans équivoque division de plancher, dans toutes les versions de Python à partir de 2.2, y compris les versions de Python 3.x.

Le comportement de / peut changer en fonction de:

  • actif __future__ importation ou non (module local)
  • option de ligne de commande Python, soit -Q old ou -Q new
40

Il aide à clarifier pour la ligne Python 2.x, / n'est ni une division de plancher, ni une division vraie. La réponse acceptée actuellement n'est pas claire à ce sujet. / est la division de plancher lorsque les deux arguments sont int, mais est vraie division lorsque l'un ou l'autre des args sont flottants. Ce qui précède dit beaucoup plus de vérité, et est beaucoup plus clair que le 2ème paragraphe de la réponse acceptée.

8
>>> print 5.0/2 
2.5 

>>> print 5.0 // 2 
2.0 
+0

N'avait pas réalisé que la division de plancher fonctionne aussi avec des non-entiers. Merci! – Mike

2

La réponse de l'équation est arrondie à l'entier plus petit suivant ou float avec .0 comme point décimal.

>>>print 5//2 
2 
>>> print 5.0//2 
2.0 
>>>print 5//2.0 
2.0 
>>>print 5.0//2.0 
2.0 
13

/ -> division à virgule flottante

// -> division étage

permet de voir quelques exemples dans les deux Python 2.7 et Python 3.5 dans.

Python 2.7.10 vs Python 3,5

print (2/3) ----> 0     Python 2.7 
print (2/3) ----> 0.6666666666666666 Python 3.5 

Python 2.7.10 vs Python 3,5

print (4/2) ----> 2   Python 2.7 
    print (4/2) ----> 2.0  Python 3.5 

Maintenant, si vous voulez avoir (en python 2.7) même sortie comme dans python 3.5, vous pouvez faire ce qui suit:

Python 2.7.10

from __future__ import division 
print (2/3) ----> 0.6666666666666666 #Python 2.7 
print (4/2) ----> 2.0     #Python 2.7 

Où qu'il n'y a pas differece entre la division étage dans les deux Python 2.7 et Python 3,5

138.93//3 ---> 46.0  #Python 2.7 
138.93//3 ---> 46.0  #Python 3.5 
4//3  ---> 1   #Python 2.7 
4//3  ---> 1   #Python 3.5 
5

**

  1. Python 2.7 et d'autres prochaine version de python:

** /Division Divise opérande gauche par opérande de droite de la main ex :: 4/2 = 2

Division étage (//) - La division des opérandes où le résultat est le quotient dans lequel les chiffres après la point décimal sont supprimés. Mais si l'un des opérandes est négatif, le résultat est plancher, c'est-à-dire arrondi à partir de zéro (vers l'infini négatif): exemples: 9 // 2 = 4 et 9.0 // 2.0 = 4.0, -11 // 3 = -4, -11.0 // 3 = -4.0

Les deux/Division et // opérateur de division de plancher fonctionnent de manière similaire

+0

Vers l'infini et loin de zéro sont des choses différentes. Exemple pour (-1.2 et 3.4): "floor" est vers l'infini négatif (-2 et 3), "truncating" vers zéro (-1 et 3), "saturating" est à l'opposé de zéro (-2 et 4), et "plafond" est vers l'infini positif (-1 et 4). – Phernost

Questions connexes