¿Por qué es que 2 // 2 = 1 y 2/2 = 1.0 en Python?

Hay una dificultad en la división que todos los lenguajes de programación que admiten la división comparten: se debe tomar una decisión de diseño para tratar una expresión como un número entero 7 dividido por un número entero 3 que podría escribir un programador. ¿Lo que debe hacerse?

En primer lugar, uno debe darse cuenta de que desde el comienzo de las computadoras electrónicas, podrían manejar enteros. Si los únicos números que maneja una computadora son enteros pero los valores no enteros necesitan ser manipulados, el programador tiene que pasar por algunas contorsiones para escalar los números mentalmente, de modo que cuando la computadora manipula enteros, el programador aplica una escala mental al entradas, cálculos intermedios y salidas para que el programador piense en estos valores como números reales (en realidad, un subconjunto muy restringido de los mismos). Es muy incómodo y muy fácil cometer errores. (Tengo experiencia personal en el manejo de dicha programación).

El concepto de aritmética de punto flotante se desarrolló para permitir trabajar mucho más convenientemente con valores no enteros, así como con valores enteros mucho más grandes (pero redondeados a alguna aproximación) que la aritmética entera nominal podría manejar. La aritmética de coma flotante usa un formato bastante similar a la notación científica, y el punto decimal (en realidad binario) podría “flotar” a través de la mantisa ajustando el valor de un exponente de potencia de 2 (no 10). Esto tuvo la consecuencia de que un valor entero como 3 tendría dos representaciones bastante diferentes, una si se manipulara con aritmética de enteros y otra si se manipulara con aritmética de punto flotante, y no se permitía mezclar y combinar. Dos valores que debían combinarse (sumados, restados, multiplicados y, si están disponibles, divididos) tenían que ser tanto una representación entera como una representación de punto flotante, por lo que se proporcionó la conversión de cada tipo al otro.

¿Cómo saber si su 7 es tratado como un número entero (en el sentido de Python, por supuesto, es matemáticamente) o de punto flotante? Si hay un punto para un punto decimal en cualquier parte de cómo se escribe el 7 (como 7. o 7.0) o hay un campo de exponente con una e o E (como 7e0) o ambos (como 7.E0), es un punto flotante 7; de lo contrario es un entero 7.

La suma, la resta y la multiplicación son sencillas: combinar dos enteros y un resultado entero, no es gran cosa. Se aplica un comportamiento paralelo para valores de punto flotante. La división es mucho más difícil filosóficamente. Si tiene un número entero 7 que desea dividir por un número entero 3, cuyo verdadero resultado matemático sería [matemática] 2 \ frac {1} {3} ≈ 2.333 [/ matemática], ¿prefiere preservar el tipo y perder? cierta precisión al proporcionar una respuesta de un número entero 2, o prefiere preservar la precisión tanto como sea posible, pero estamos dispuestos a que el resultado sea de punto flotante (2.333 aproximadamente) a pesar de que los operandos son enteros? (Algunos lenguajes ofrecen otra alternativa de devolver un par entero que es un numerador y denominador de una fracción reducida si la división no tiene un resultado entero matemáticamente). Python le da la opción de decir lo que prefiere:

El operador de división de doble barra toma dos enteros, realiza una división de enteros con un resultado entero para el cociente, tirando el resto, por lo que 7 // 3 produce el entero 2. El mismo proceso ocurre cuando el primer operando es divisible por el segundo: 2 // 2 produce el número entero 1. El operador // también puede tomar operandos de punto flotante, y ocurre el mismo proceso, solo en el mundo de punto flotante, entonces 7.0 // 3.0 produce 2.0. El resultado debe tener un valor entero, pero puede ser una representación entera o una representación de punto flotante, según los tipos de operandos.

El operador de división de barra simple, dados dos operandos, convierte cualquier operando entero en punto flotante y luego realiza la división como punto flotante, por lo que 7/3 produce el punto flotante 2.333 (sin importar muchos dígitos de precisión, y es finito, flotante -división de puntos proporciona). El mismo proceso ocurre cuando el primer operando es divisible por el segundo: 2/2 produce el punto flotante 1.0.

Esta explicación está muy simplificada, destinada a estar al nivel de la pregunta publicada. Hay algunas advertencias, que espero que algunos expertos de Python estén preocupados:
* Hay dos tipos enteros distintos en Python, comúnmente referidos a enteros simples y enteros largos. Esto es cierto e importante para algunas discusiones, pero no esta.
* El operador / realmente no “tira el resto”, se trunca. Sí, tiene razón en que “truncar” es técnicamente una palabra más precisa. La pregunta publicada está al nivel de un novato relativo. En ese nivel, “truncar” conlleva una connotación cotidiana de tirar el resto, y es poco probable que el novato esté íntimamente familiarizado con las sutilezas de la división con un operando positivo y un operando negativo, por lo que el cociente se evalúa como el mayor entero. menor o igual que el cociente matemático, de modo que 7 // 3 rinde 2, (-7) // 3 rinde -3 y -7 // 3 rinde -2. Las expresiones en la pregunta publicada solo involucraban operandos positivos, y deseaba centrarme en el tema específico en cuestión y no complicarlo arrastrando y mezclándome con otras fuentes de confusión.

En python ‘/’ se usa para la división flotante, es decir, se mostrará el resultado real.

Ejemplo: 6/5 = 1.2

Y ‘//’ se usa para obtener solo una parte entera del resultado.

Mismo ejemplo: 6 // 5 = int (1.2) = 1

// la división es equivalente a la división del piso.

Gracias.

// y / son operadores diferentes.

// realiza una división entera, y la porción decimal de cualquier cociente se truncará esencialmente del resultado

(Por ejemplo, 5 // 2 == 2)

/ realiza la división de punto flotante, por lo que está realizando efectivamente

2.0 / 2.0

Y debe devolver otro número de coma flotante, 1.0.

Espero que esto ayude.

2 // 2

es lo que se conoce como división de piso en Python.

La división de piso es básicamente un operador que devuelve solo el valor entero truncado del operador de división, por lo tanto, su tipo de retorno es un entero. Por lo tanto, devuelve “1” como salida.

2/2

es una división simple de dos números, que devuelve el valor entero flotante del operador de división, por lo tanto, su tipo de retorno es un número flotante (flotante). Por lo tanto, devuelve “1.0” como salida.

Porque el operador ‘//’ es una división entera, lo que significa que solo devolverá un número entero. También se conoce como división de piso, porque da el resultado redondeado de la división (solo la parte del número entero).

Por ejemplo, 5/2 es 2.5, y el piso de 2.5 es 2. Esto significa que 5 // 2 = piso (2.5) = 2.

El operador de división estándar, ‘/’, devuelve un flotante. Este es un valor con un lugar decimal, y para diferenciar entre un flotante y un entero, Python le dará al flotante un punto decimal incluso si el valor decimal es 0.

Simplemente porque // es un símbolo para la división de enteros mientras / es un símbolo para la división normal donde casi todos los lugares decimales permanecen allí (llamado: división de punto flotante).

También puede hacer int (1/1) y obtendrá 1. Así es como convierte float a integer en python.

2 // 2 es 2 DIV 2. Un DIV siempre regresará como un entero (sin resto) mientras que 2/2 es 2 dividido por 2 y un cálculo de división puede tener un decimal.

2 // 2 = 1
Porque el operador ‘//’ se interpreta como división entera.

2/2 = 1.0
Porque el operador ‘/’ se interpreta como división de punto flotante.