redondear - La división entera de Python produce flotación
resta en python (4)
Eche un vistazo a PEP-238 : Cambiar el operador de la división
El operador // estará disponible para solicitar la división del piso sin ambigüedades.
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
¿Esto es intencionado? Recuerdo fuertemente las versiones anteriores que devuelven int/int=int
? ¿Qué debo hacer? ¿Hay un nuevo operador de división o debo lanzar siempre?
Espero que pueda ayudar a alguien al instante.
Comportamiento del operador de división en Python 2.7 y Python 3
En Python 2.7: de forma predeterminada, el operador de división devolverá la salida entera.
para obtener el resultado en doble múltiple 1.0 para "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 . Solo quiero agregar un vistazo rápido detrás de las escenas para aquellos interesados en lo que está sucediendo sin leer todo el PEP.
Python mapea operadores como +
, -
, *
y /
a funciones especiales, de modo que, por ejemplo, a + b
es equivalente a
a.__add__(b)
En cuanto a la división en Python 2, solo existe por defecto /
que se asigna a __div__
y el resultado depende de los tipos de entrada (por ejemplo, int
, float
).
Python 2.2 introdujo la division
funciones __future__
, que cambió la semántica de división de la siguiente manera (TL; DR de PEP 238):
-
/
maps a__truediv__
que debe "devolver una aproximación razonable del resultado matemático de la división" (cita de PEP 238) -
//
asigna a__floordiv__
, que debe devolver el resultado de piso de/
Con Python 3.0, los cambios de PEP 238 se convirtieron en el comportamiento predeterminado y no hay más método especial __div__
en el modelo de objetos de Python.
Si desea usar el mismo código en Python 2 y Python 3 use
from __future__ import division
y apegarse a la semántica PEP 238 de /
y //
.
Vaya, encontré inmediatamente 2//2
.