Resultado sorprendente de la división entera negativa
En mi aplicación encontré lo siguiente y me sorprendieron los resultados:
8/-7=-2
(ambos números enteros).
¿Qué quiere decir esto?
Para los valores reales, es decir 8.0/(-7.0)
, el resultado es aproximadamente -1.143
.
Su resultado usando 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 de piso")
Es por eso que obtendrá respuestas algo desconcertantes de:
>>> 8/(-7)
-2
>>> 8/7
1
Nota: Esto está "arreglado" en Python 3, donde el resultado 8/(-7)
sería -1.143
. Entonces, si no tiene ninguna razón para usar Python 2, debe actualizar. ;)
En Python 3, si aún deseas la división de enteros, puedes 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 - Cambio del operador de división
Python siempre realiza la "división básica" tanto para la división de números negativos como para la división de números positivos.
Eso es
1/10 = 0
1/-10 = -1
Pero en algún momento necesitamos que 1/-10 sea 0
Me doy cuenta de que se puede hacer usando primero la división flotante y luego transmitiendo el resultado a int, por ejemplo
int(float(1)/-10) = 0
Eso funciona bien para mí, no es necesario importar la división futura ni actualizar a Python 3.
Espero que pueda ayudarte ~