python python-3.x division integer-division

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.