Pregunta 1¿Qué imprime este código?
print(type(10 / 2))
Números y números de punto flotante (float)
Aprende los tipos numéricos de Python: int y float, operadores aritméticos y la precisión de los flotantes.
Python tiene dos tipos numéricos
Python dispone de dos tipos numéricos principales para trabajar con números: int para números enteros y float (punto flotante) para decimales.
Ambos son números, así que puedes hacer toda la aritmética básica — suma, resta, multiplicación, división y módulo — con cualquiera.
Pero su sintaxis y precisión difieren, así que eliges el adecuado para cada situación.
Escríbelo sin . y obtienes un int.
Escríbelo con . y obtienes un float.
En cualquier caso, type() te dice cuál tienes.
Aunque el valor parezca un número entero, añadir .0 como 3.0 lo convierte en float. Al contrario, escribir solo 175 lo deja como int.
Los negativos funcionan igual — -5 es int, -5.5 es float.
# int (número entero)
age = 25
print(type(age)) # <class 'int'>
# float (punto flotante)
weight = 175.5
print(type(weight)) # <class 'float'>
# El mismo "3", tipos distintos según cómo se escribe
print(type(3)) # <class 'int'>
print(type(3.0)) # <class 'float'>
# Los negativos funcionan igual
print(type(-10)) # <class 'int'>
print(type(-10.5)) # <class 'float'>
Repaso rápido de los operadores
Hay 7 operadores que usas para matemáticas numéricas. Las cuatro operaciones básicas + - * / funcionan igual que en otros lenguajes, pero // (división entera), % (módulo) y ** (exponenciación) aparecen mucho en Python, así que vale la pena dominarlos.
| Operador | Significado | Ejemplo | Resultado |
|---|---|---|---|
| + | Suma | 10 + 3 | 13 |
| - | Resta | 10 - 3 | 7 |
| * | Multiplicación | 10 * 3 | 30 |
| / | División (siempre float) | 10 / 3 | 3.3333... |
| // | División entera (trunca decimales) | 10 // 3 | 3 |
| % | Módulo (resto de la división) | 10 % 3 | 1 |
| ** | Exponenciación | 2 ** 10 | 1024 |
/ devuelve float incluso entre ints
10 / 2 es 5.0 (float), no 5.
El / de Python está diseñado para devolver siempre un float, así que el resultado es float incluso cuando ambos operandos son ints.
Si quieres un resultado entero, usa //.
# Aritmética básica
print(10 + 3) # 13
print(10 - 3) # 7
print(10 * 3) # 30
# La división siempre devuelve float
print(10 / 3) # 3.3333333333333335
print(10 / 2) # 5.0 (sigue siendo float aunque divida exacto)
# División entera (trunca) y módulo
print(10 // 3) # 3
print(10 % 3) # 1
# Exponenciación: a ** b significa «a elevado a b»
print(2 ** 10) # 1024
print(3 ** 2) # 9
print(2 ** 0.5) # 1.4142135623730951 (se puede usar como raíz cuadrada)
Operadores de asignación compuesta (+= / -= etc.)
Los patrones del tipo «x = x + 1» — donde haces algo a una variable y guardas el resultado en ella misma — aparecen a menudo.
Puedes acortarlo a «x += 1», y estas formas abreviadas se llaman operadores de asignación compuesta.
Cada uno de `+ - / // % * tiene una forma compuesta.
La forma corta es una manera de una línea de decir «hazme algo y guárdalo de vuelta».
Internamente se comporta exactamente como la forma expandida a la derecha.
Por ejemplo, esto es lo que hace cada operador cuando x = 10.
score = 10
score += 5 # 10 + 5 -> 15
print(score) # 15
score *= 2 # 15 * 2 -> 30
print(score) # 30
score -= 7 # 30 - 7 -> 23
print(score) # 23
# Funciona igual con float
weight = 60.0
weight += 1.5
print(weight) # 61.5
Mezclar int y float en operaciones
Cuando mezclas int y float, el resultado siempre es float. Es porque Python promueve automáticamente al tipo de mayor precisión.
Como se mencionó antes, / (división) devuelve float incluso entre ints, mientras que // (división entera) devuelve int cuando ambos operandos son ints.
int + int = int.
Pero / siempre devuelve float.
Si algún lado es float, el resultado es float.
# int con int sigue siendo int
print(10 + 3) # 13 -> int
print(type(10 + 3)) # <class 'int'>
# Si algún lado es float, el resultado es float
print(10 + 3.0) # 13.0
print(type(10 + 3.0)) # <class 'float'>
# / devuelve float incluso entre ints
print(10 / 2) # 5.0
print(type(10 / 2)) # <class 'float'>
# // sigue siendo int cuando ambos son int
print(10 // 3) # 3
print(type(10 // 3)) # <class 'int'>
# // pasa a float si algún lado es float
print(10 // 3.0) # 3.0
print(type(10 // 3.0)) # <class 'float'>
float tiene precisión limitada
Las computadoras almacenan los float como una aproximación binaria. Por eso, incluso cálculos que parecen simples pueden producir un pequeño error.
El ejemplo de abajo es un clásico «gotcha de float» — todo principiante se topa con él en algún momento.
Usa Decimal cuando necesites matemáticas exactas
En situaciones donde incluso un pequeño error es inaceptable — como los cálculos monetarios — puedes hacer aritmética decimal exacta con el tipo Decimal de la biblioteca estándar. No lo cubriremos en este artículo, pero recuerda: «float es una aproximación» y «hay otra herramienta para matemáticas exactas».
Cambiar de tipo con int() y float()
Para convertir entre tipos numéricos, usa las funciones integradas int() y float().
Ojo con una cosa: int() trunca la parte decimal — no redondea. Así que pasar 3.9 a int() te da 3, no 4. En los negativos, redondea hacia cero, así que -3.9 se vuelve -3, no -4.
# float -> int es «truncar» (¡NO redondear!)
print(int(3.9)) # 3
print(int(3.1)) # 3
print(int(-3.9)) # -3 (redondea hacia cero)
# int -> float solo añade .0
print(float(5)) # 5.0
print(float(-2)) # -2.0
# Usar la conversión a través de una variable
a = 3.9
a = int(a)
print(a, type(a)) # 3 <class 'int'>
b = 5
b = float(b)
print(b, type(b)) # 5.0 <class 'float'>
En este artículo aprendiste:
- La diferencia entre int y float
- Exponenciación con «**» y asignación compuesta (+= y compañía)
- La diferencia de tipo de retorno entre «/» (división) y «//» (división entera)
- Los problemas de precisión de float
- La conversión de tipos con int() / float()
Verificación de conocimientos
Responde cada pregunta una a una.
Pregunta 2¿Qué imprime este código?
x = 10
x **= 3
print(x)`
Pregunta 3¿Qué imprime este código?print(int(-3.9))