2011-10-26 609 views
6

estoy confundido acerca de lo siguiente matemáticas número entero en Python:La división entera en Python

-7/3 = -3 desde (-3)*3 = -9 < -7. Entiendo.

7/-3 = -3 No entiendo cómo se define esto. (-3)*(-3) = 9 > 7. En mi opinión, debería ser -2, porque (-3)*(-2) = 6 < 7.

¿Cómo funciona esto?

+0

Python generalmente sigue el Principio de Menos Asombro. Simplemente siempre redondea hacia abajo para la división de enteros. – Chriszuma

+3

Aquí está la razón de ser, directamente desde el propio bdfl: http://python-history.blogspot.com/2010/08/why-pythons-integer-division-floors.html –

+1

Para las personas que vienen aquí para la ayuda de la división entera: En Python 3, la división de enteros se hace usando '//', por ej. '-7 // 3 = -3' pero' -7/3 = -2.33..'. – poke

Respuesta

13

Desde el documentation:

Para la división de enteros (normal o larga), el resultado es un número entero. El resultado siempre se redondea hacia el infinito menos: 1/2 es 0, (-1)/2 es -1, 1/(- 2) es -1 y (-1)/(- 2) es 0.

El redondeo hacia -inf explica el comportamiento que está viendo.

+0

Vaya, se perdió eso. Aunque no me gusta, ahora veo cómo funciona. – Jonathan

4

Así es como funciona:

int(x)/int(y) == math.floor(float(x)/float(y)) 
0

Python redondea hacia abajo. 7/3 = 2 (2 + 1/3) -7/3 = -3 (-2 + 1/3)

1

Ampliando las respuestas de aix y robert.

La mejor manera de pensar en esto es en términos de redondeo hacia abajo (hacia menos infinito) el resultado de coma flotante:

-7/3 = floor(-2.33) = -3

7/-3 = floor(-2.33) = -3

0

/se utiliza para la división de coma /flotante/se utiliza para la división entera (devuelve un número entero)

Y python redondea el resultado por

Cuestiones relacionadas