python - Resultado sorprendente de la división entera negativa
python-3.x division (5)
Cuando ambos valores son enteros al dividir, Python usa la división Piso.
En mi aplicación encontré lo siguiente y me sorprendieron los resultados:
8/-7=-2
(ambos enteros).
¿Qué significa esto?
En python, /
operator es para división entera. Puedes verlo como una división flotante seguida de una operación de floor
.
Por ejemplo,
8/7 == piso (8.0 / 7.0) == 1
8 / -7 == piso (8.0 / -7.0) == -2
Para los valores reales, es decir, 8.0/(-7.0)
, el resultado es aproximadamente -1.143
.
El resultado que usa la división de enteros se redondea hacia abajo, hacia el valor más negativo de -2
. (Esto también se conoce como "división del piso")
Es por eso que obtendrás las respuestas algo desconcertantes de:
>>> 8/(-7)
-2
>>> 8/7
1
Nota: Esto es "fijo" en Python 3, donde el resultado de 8/(-7)
sería -1.143
. Entonces, si no tienes motivos para usar Python 2, debes actualizar. ;)
En Python 3, si aún desea la división de enteros, puede usar el operador //
. Esto le dará la misma respuesta que 8/(-7)
en Python 2.
Aquí hay una propuesta de mejora de Python sobre el tema: PEP 238 - Cambiar el operador de la división
Python siempre hace la "división del piso" para división de números negativos y división de números positivos.
Es decir
1/10 = 0
1/-10 = -1
Pero alguna vez necesitamos que 1 / -10 sea 0
Me imagino que se puede hacer utilizando primero la división de flotación y luego arrojar el resultado a int, por ej.
int(float(1)/-10) = 0
Eso funciona bien para mí, no es necesario importar la futura división o actualizar a Python 3
Espero que te pueda ayudar ~
para que python convierta automáticamente la división de enteros en flotante, puede usar:
from __future__ import division
ahora:
8/-7=-1.1428571428571428
esta característica no está en el estándar python 2 para no romper el código existente que dependía de la división de enteros. Sin embargo, este es el comportamiento predeterminado para python 3.