web-dev-qa-db-fra.com

Résultat surprenant de division entière négative

Dans ma candidature, j'ai rencontré les éléments suivants et j'ai été surpris par les résultats:

8/-7=-2 (les deux entiers).

que cela veut-il dire?

44
Vivek S

Pour les valeurs réelles, c'est-à-dire 8.0/(-7.0), le résultat est à peu près -1.143.

Votre résultat utilisant la division entière est arrondi vers le bas vers la valeur plus négative de -2. (Ceci est également connu sous le nom de "division de plancher")

C'est pourquoi vous obtiendrez les réponses quelque peu déroutantes de:

>>> 8/(-7)
-2
>>> 8/7
1

Remarque: Ceci est "corrigé" dans Python 3, où le résultat de 8/(-7) serait être -1.143. Donc, si vous n'avez aucune raison d'utiliser Python 2, vous devriez mettre à jour.;)

Dans Python 3, si vous voulez toujours une division entière, vous pouvez utiliser l'opérateur //. Cela vous donnera la même réponse que 8/(-7) dans = Python 2.

Voici une Python proposition d'amélioration sur le sujet: PEP 238 - Changer l'opérateur de division

49
Chris Cooper

Python fait toujours la "division au sol" pour la division des nombres négatifs et la division des nombres positifs.

C'est

1/10 = 0
1/-10 = -1

Mais il nous faut parfois 1/-10 pour être 0

Je pense que cela peut être fait en utilisant d'abord la division flottante, puis en convertissant le résultat en entier, par exemple.

int(float(1)/-10) = 0

Cela fonctionne bien pour moi, pas besoin d'importer la future division ou de mettre à niveau vers Python 3

J'espère que cela peut vous aider ~

12
ZH.Jay

pour avoir python convertit automatiquement la division entière en float, vous pouvez utiliser:

from __future__ import division

maintenant:

8/-7=-1.1428571428571428

cette fonctionnalité n'est pas dans la norme python 2 pour ne pas casser le code existant qui reposait sur la division entière. Cependant, c'est le comportement par défaut pour python 3.

9
Andrea Zonca

Lorsque les deux valeurs sont des nombres entiers lors de la division Python utilise la division Floor.

4
Lossy

En python, / L'opérateur est pour la division entière. Vous pouvez le regarder comme une division flottante suivie d'une opération floor.

Par exemple,

8/7 == étage (8.0/7.0) == 1

8/-7 == étage (8.0/-7.0) == -2

0
Rumple Stiltskin