¿La forma más segura de convertir flotante a entero en Python?

Resuelto Boaz asked hace 14 años • 9 respuestas

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 fregresa:

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?

Boaz avatar Aug 02 '10 19:08 Boaz
Aceptado

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 intsegú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.

Philipp avatar Aug 02 '2010 12:08 Philipp

El uso int(your non integer number)lo clavará.

print int(2.3) # "2"
print int(math.sqrt(5)) # "2"
srodriguex avatar Jan 26 '2013 11:01 srodriguex