Los floats en Python representan números con parte decimal, como 3.14, -0.5 o 1250.00. Se utilizan en medidas, promedios, porcentajes, gráficos, cálculos científicos y muchas otras tareas.
Aunque parecen sencillos, los floats se almacenan normalmente como aproximaciones binarias. Comprender esta limitación ayuda a evitar comparaciones incorrectas y a elegir entre float, Decimal o enteros según las necesidades del proyecto.
Qué es un float
temperature = 21.5
height = 1.82
discount = 0.15
print(type(temperature))Un número escrito con punto decimal se convierte en float. La notación científica también produce floats:
large = 1.2e6
small = 4.5e-4
print(large)
print(small)Para comparar esta estructura con los números enteros, consulta la guía de enteros en Python.
Crear y convertir floats
La función float() convierte enteros o cadenas compatibles:
price = float("19.90")
average = float(8)
print(price)
print(average)Una cadena inválida genera ValueError:
try:
value = float(input("Número decimal: "))
except ValueError:
print("Introduce un número válido.")Las guías de input() en Python y try y except explican cómo validar datos externos.
Operaciones aritméticas
a = 10.5
b = 2.0
print(a + b)
print(a - b)
print(a * b)
print(a / b)
print(a ** b)
print(a % b)Cuando una operación combina un entero y un float, el resultado suele ser un float:
result = 5 + 2.5
print(result)
print(type(result))La división normal siempre devuelve un float:
print(10 / 2) # 5.0La división entera con // redondea hacia menos infinito:
print(10.0 // 3)
print(-10.0 // 3)Por qué 0.1 + 0.2 no es exactamente 0.3
print(0.1 + 0.2)
# 0.30000000000000004Esto no es un error exclusivo de Python. Muchas fracciones decimales no tienen una representación binaria finita. El sistema almacena el valor disponible más cercano.
La guía oficial sobre aritmética de punto flotante explica este comportamiento.
Comparar floats correctamente
La igualdad directa puede fallar después de varios cálculos:
total = 0.1 + 0.2
print(total == 0.3)Cuando la igualdad aproximada sea apropiada, utiliza math.isclose():
import math
total = 0.1 + 0.2
print(math.isclose(total, 0.3))Puedes definir tolerancias:
math.isclose(
a,
b,
rel_tol=1e-9,
abs_tol=1e-12,
)La tolerancia absoluta es especialmente importante cerca de cero.
Redondear valores
value = 12.34567
print(round(value))
print(round(value, 2))Python utiliza una estrategia de redondeo al par en ciertos empates. Además, el float almacenado puede estar ligeramente por encima o por debajo del valor decimal escrito.
print(round(2.5))
print(round(3.5))Formatear para mostrar no es lo mismo que modificar el valor:
price = 19.9876
print(f"${price:.2f}")La guía de f-strings para números y moneda presenta decimales, porcentajes y alineación.
Por qué no siempre conviene usar float para dinero
Pequeñas aproximaciones pueden acumularse en cálculos financieros. Para aritmética decimal exacta utiliza Decimal, creando los valores desde cadenas:
from decimal import Decimal
price = Decimal("19.90")
quantity = Decimal("3")
total = price * quantity
print(total)Evita crear un Decimal desde un float cuando la exactitud decimal sea importante:
exact = Decimal("0.1")
from_float = Decimal(0.1)La documentación oficial de Decimal explica precisión, contextos y modos de redondeo.
Valores especiales
Los floats pueden representar infinito y NaN:
positive_infinity = float("inf")
negative_infinity = float("-inf")
not_a_number = float("nan")Comprueba estos valores con math:
import math
print(math.isinf(positive_infinity))
print(math.isnan(not_a_number))
print(math.isfinite(12.5))NaN no es igual a sí mismo:
nan = float("nan")
print(nan == nan)Utiliza siempre math.isnan() para detectarlo.
Funciones útiles del módulo math
import math
value = 7.8
print(math.floor(value))
print(math.ceil(value))
print(math.trunc(value))
print(math.sqrt(81.0))
print(math.fsum([0.1, 0.1, 0.1]))math.fsum() suele ofrecer una suma más precisa para secuencias de floats.
Formatear para el usuario
distance = 12345.6789
ratio = 0.4236
print(f"Distancia: {distance:,.2f} km")
print(f"Progreso: {ratio:.1%}")
print(f"Notación científica: {distance:.3e}")El número de decimales debe responder al dominio. Una medida puede requerir tres posiciones, mientras que un porcentaje puede necesitar una.
Proyecto: calculadora de notas
def read_grade(prompt):
while True:
try:
grade = float(input(prompt))
except ValueError:
print("Introduce una nota numérica.")
continue
if not 0 <= grade <= 100:
print("La nota debe estar entre 0 y 100.")
continue
return grade
grades = [
read_grade("Primera nota: "),
read_grade("Segunda nota: "),
read_grade("Tercera nota: "),
]
average = sum(grades) / len(grades)
print(f"Promedio: {average:.2f}")Este proyecto combina conversión, validación, listas, funciones y formato. La guía de funciones en Python ayuda a crear validadores reutilizables.
Conversión de medidas
def celsius_to_fahrenheit(celsius):
return celsius * 9 / 5 + 32
def kilometers_to_miles(kilometers):
return kilometers * 0.621371
celsius = 24.5
kilometers = 10.0
print(
f"{celsius:.1f} °C = "
f"{celsius_to_fahrenheit(celsius):.1f} °F"
)
print(
f"{kilometers:.1f} km = "
f"{kilometers_to_miles(kilometers):.2f} millas"
)Convertir entre int y float
int() trunca hacia cero; no redondea:
print(int(9.9))
print(int(-9.9))Utiliza round(), floor() o ceil() cuando su comportamiento sea el requerido.
Floats en análisis de datos
NumPy y Pandas utilizan floats para medidas y valores ausentes en muchos contextos. Antes de comparar, agregar o exportar, revisa la presencia de NaN, infinitos y errores de conversión. La guía de análisis de datos con Pandas y NumPy muestra un flujo completo.
Errores frecuentes
- Comparar resultados calculados con
==. - Usar float para importes que requieren exactitud decimal.
- Confundir
int()con redondeo. - Redondear resultados intermedios demasiado pronto.
- Ignorar NaN e infinito en datos importados.
- No validar texto antes de convertirlo.
- Suponer que dos decimales son adecuados para cualquier medida.
Conclusión
Los floats permiten cálculos decimales y científicos, pero son aproximaciones binarias. Aprende a convertir, comparar con tolerancias, formatear, detectar valores especiales y elegir Decimal cuando el dominio exija exactitud. La mejor representación depende del problema, no de una preferencia universal.






