División del piso con número negativo.

La expresión 6 // 4 produce 1 , donde la división de piso produce el número entero después de dividir un número.

Pero con un número negativo, ¿por qué -6 // 4 devuelve -2 ?

El operador // explícitamente subraya el resultado. Citando la documentación de operaciones aritméticas binarias :

el resultado es el de la división matemática con la función ‘piso’ aplicada al resultado.

Suelos no es lo mismo que redondear a 0; suelo siempre se mueve hacia el valor entero más bajo . Ver la función math.floor() :

Devuelve el piso de x , el entero más grande menor o igual que x .

Para -6 // 4 , primero se calcula el resultado de -6 / 4 , entonces -1.5 . El suelo luego se mueve al valor entero más bajo, entonces -2 .

Si quieres redondear hacia cero, deberás hacerlo explícitamente; puedes hacer esto con la función int() en la división verdadera:

 >>> int(-6 / 4) -1 

int() elimina la parte decimal, por lo que siempre se redondea hacia cero.

La división de piso también se redondeará al siguiente número más bajo, no al siguiente valor absoluto más bajo.

6 // 4 = 1.5 , que se redondea a 1, y hasta 2.

-6 // 4 = -1.5 , que se redondea a -2, y hasta -1.

// en Python es un operador de “división de piso”. Eso significa que el resultado de dicha división es el piso del resultado de la división regular (realizada con / operator).

El piso del número dado es el mayor entero más pequeño que este número. Por ejemplo

 7 / 2 = 3.5 so 7 // 2 = floor of 3.5 = 3. 

Para los números negativos es menos intuitivo: -7 / 2 = -3.5, entonces -7 // 2 = floor of -3.5 = -4 . Similarmente -1 // 10 = floor of -0.1 = -1.

// está definido para hacer lo mismo que math.floor() : devolver el valor entero más grande menor o igual al resultado de punto flotante. Zero is not less than or equal to -0.1.

Una forma útil de entender por qué la división de suelo // produce los resultados que obtiene para valores negativos es ver esto como un complemento del módulo, o rest,% operador.

 5/3 is equivalent to 1 remainder 2 

es decir

 5//3 = 1 5%3 = 2 

Pero

 -5/3 = -2 -5%3 = 1 

O

 -2 + 1/3rd which is -1.6667 (ish) 

Puede parecer extraño, pero asegura resultados como -2,-2,-2,-1,-1,-1,0,0,0,1,1,1,2,2,2,3,3,3 etc. al generar secuencias.