Números, Booleanos y Aritmética
Python proporciona enteros de tamaño ilimitado, flotantes binarios y tipos numéricos exactos para dominios que no pueden tolerar errores de redondeo. Los booleanos participan en la aritmética porque heredan de int.
Busca en todas las páginas de la documentación
Python proporciona enteros de tamaño ilimitado, flotantes binarios y tipos numéricos exactos para dominios que no pueden tolerar errores de redondeo. Los booleanos participan en la aritmética porque heredan de int.
from decimal import Decimal
price = Decimal("19.99")
tax = Decimal("0.0825")
total = price * (1 + tax)
a, b = 7, 3
print(a / b, a // b, a % b, divmod(a, b))Cuándo recurrir a esto:
if y whilefrom decimal import Decimal, ROUND_HALF_UP
from fractions import Fraction
def invoice_line(unit_price: str, qty: int, tax_rate: str) -> Decimal:
price = Decimal(unit_price)
tax = Decimal(tax_rate)
subtotal = price * qty
tax_amount = (subtotal * tax).quantize(Decimal("0.01"), rounding=ROUND_HALF_UP)
return subtotal + tax_amount
def float_trap() -> None:
print(0.1 + 0.2) # 0.30000000000000004
print(Fraction(1, 10) + Fraction(2, 10)) # 3/10 exacto
def truthiness() -> None:
for value in [0, 1, "", "x", [], [0], None]:
print(repr(value), "->", bool(value))
if __name__ == "__main__":
print(invoice_line("19.99", 3, "0.0825"))
float_trap()
truthiness()Lo que esto demuestra:
Decimal construido a partir de cadenas evita artefactos binarios de flotantesquantize controla el redondeo para la visualización de monedaFraction mantiene los números racionales exactosNone son falsosint; True == 1, False == 0.| Operador | Significado | Notas |
|---|---|---|
/ | División verdadera | Siempre devuelve float |
// | División entera (floor division) | Redondea hacia el infinito negativo |
% | Módulo | El signo sigue al divisor en Python 3 |
** | Potencia | Los enteros grandes pueden crecer rápidamente |
& | ^ << >> | Bit a bit | Solo en enteros |
import math
math.isclose(0.1 + 0.2, 0.3) # preferir sobre == para flotantes
int("ff", 16) # conversión de base
float("nan") != float("nan") # NaN no es igual a sí mismo0.1 + 0.2 == 0.3 es False. Solución: math.isclose o Decimal.-7 // 3 es -3, no -2. Solución: Recuerda que redondea hacia -inf.Decimal(0.1) hereda la imprecisión del flotante. Solución: Decimal("0.1").True + True es igual a 2. Solución: No uses booleanos en sumas a menos que sea intencional.int o usa Decimal.| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
Decimal | Dinero, impuestos, facturación | Matemáticas vectoriales científicas intensivas |
Fraction | Matemáticas racionales exactas | Necesitas funciones trascendentales |
numpy.float64 | Arrays numéricos | Aritmética simple de scripts |
Solo int | Conteo, indexación | Necesitas valores fraccionarios |
Los flotantes binarios no pueden representar 0.1 exactamente. La suma está cerca pero no es idéntica; usa isclose o Decimal.
Decimal para moneda y en cualquier lugar donde los humanos esperen redondeo en base 10. float para ciencia, ML y rendimiento.
Los objetos definen su veracidad a través de __bool__ o __len__. Los contenedores vacíos y los números cero son falsos; la mayoría de los demás objetos son verdaderos.
from decimal import Decimal, ROUND_HALF_UP
Decimal("2.675").quantize(Decimal("0.01"), rounding=ROUND_HALF_UP)Redondea hacia abajo (floor): -7 // 3 es -3 porque floor(-2.33) es -3.
bool hereda de int. isinstance(True, int) es True, pero usa booleanos solo para lógica, no para contar.
Envuelve int() / Decimal() en try/except ValueError, o valida con una biblioteca de esquemas en los límites de la API.
Devuelve (a // b, a % b) en una sola llamada; común para paginación y aritmética de relojes.
Sí, en Python 3; el límite práctico es la memoria. La criptografía y las operaciones con bigint dependen de esto.
Operan sobre patrones de bits de enteros; útiles para indicadores, máscaras y protocolos de bajo nivel.
Versiones de Stack: Esta página fue escrita para Python 3.14.0 (estable 3.14, mantenimiento 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, y uv 0.6+.
Revisado por Chris St. John·Última actualización: 19 jul 2026