¿La forma más segura de convertir flotante a entero en Python?
El módulo matemático de Python contiene funciones útiles como floor
& ceil
. Estas funciones toman un número de punto flotante y devuelven el número entero más cercano debajo o encima de él. Sin embargo, estas funciones devuelven la respuesta como un número de coma flotante. Por ejemplo:
import math
f=math.floor(2.3)
Ahora f
regresa:
2.0
¿Cuál es la forma más segura de obtener un número entero de este flotante, sin correr el riesgo de errores de redondeo (por ejemplo, si el flotante es el equivalente a 1,99999) o quizás debería usar otra función?
Todos los números enteros que pueden representarse mediante números de coma flotante tienen una representación exacta. Para que pueda utilizarlo de forma segura int
según el resultado. Las representaciones inexactas ocurren solo si intentas representar un número racional con un denominador que no es una potencia de dos.
¡Que esto funcione no es nada trivial! Es una propiedad de la representación de punto flotante IEEE que int∘floor = ⌊⋅⌋ si la magnitud de los números en cuestión es lo suficientemente pequeña, pero son posibles diferentes representaciones donde int(floor(2.3)) podría ser 1.
Para citar de Wikipedia ,
Cualquier número entero con valor absoluto menor o igual a 2 24 se puede representar exactamente en el formato de precisión simple, y cualquier número entero con valor absoluto menor o igual a 2 53 se puede representar exactamente en el formato de precisión doble.
El uso int(your non integer number)
lo clavará.
print int(2.3) # "2"
print int(math.sqrt(5)) # "2"