La división de enteros de Python produce flotación
-
16-09-2019 - |
Pregunta
Python 3.1 (r31:73574, Jun 26 2009, 20:21:35) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 2/2
1.0
¿Es esto lo que se pretende?Recuerdo fuertemente que regresaron versiones anteriores. int/int=int
?¿Qué debo hacer? ¿Hay un nuevo operador de división o debo lanzar siempre?
Solución
Tome un vistazo a PEP-238 : Cambiar el operador de división
El operador // estará disponible para solicitar la división de suelo sin ambigüedad.
Otros consejos
Vaya, que se encuentra inmediatamente 2//2
.
Espero que podría ayudar a alguien al instante.
Comportamiento de la División de operador en Python 2.7 y Python 3
En Python 2.7:. Por defecto, operador de división volverá salida entero
para obtener el resultado en doble múltiple 1.0 a "dividendo o divisor"
100/35 => 2 #(Expected is 2.857142857142857)
(100*1.0)/35 => 2.857142857142857
100/(35*1.0) => 2.857142857142857
En Python 3
// => used for integer output
/ => used for double output
100/35 => 2.857142857142857
100//35 => 2
100.//35 => 2.0 # floating-point result if divsor or dividend real
La respuesta aceptada ya menciona PEP 238.Sólo quiero agregar un vistazo rápido detrás de escena para aquellos interesados en lo que está sucediendo sin leer el PEP completo.
Operadores de mapas de Python como +
, -
, *
y /
a funciones especiales, como p.e. a + b
es equivalente a
a.__add__(b)
Con respecto a la división en Python 2, por defecto solo hay /
que se asigna a __div__
y el resultado depende de los tipos de entrada (p. ej. int
, float
).
Python 2.2 introdujo el __future__
característica division
, que cambió la semántica de división de la siguiente manera (TL;DR de PEP 238):
/
mapas para__truediv__
que debe "devolver una aproximación razonable del resultado matemático de la división" (cita de PEP 238)//
mapas para__floordiv__
, que debería devolver el resultado de suelo de/
Con Python 3.0, los cambios de PEP 238 se convirtieron en el comportamiento predeterminado y ya no existe un método especial. __div__
en el modelo de objetos de Python.
Si desea utilizar el mismo código en Python 2 y Python 3, utilice
from __future__ import division
y atenerse a la semántica PEP 238 de /
y //
.