Python / int() / Convertir valores a enteros

En Python, int() convierte una cadena con formato de entero o un número admitido en un objeto entero. Los valores de coma flotante se truncan hacia cero: int(-2.7) devuelve -2, sin redondear ni aplicar el suelo matemático. Una cadena con punto decimal como "12.0" no se convierte directamente.

Conversión básica y valor devuelto

int(value) devuelve un int; sin argumento devuelve cero. Las cadenas se interpretan en base diez por defecto y permiten espacios alrededor, signo y guiones bajos correctamente colocados entre cifras. True y False se convierten en 1 y 0. Consulte la referencia oficial de int() para los formatos admitidos.

Solo necesita Python 3. Guarde cada ejemplo completo en UTF-8 como int_example.py y ejecute python int_example.py, o python3 según su instalación. Cambie el contenido del archivo para ejecutar cada ejemplo por separado.

print(int())
print(int("  +123  "))
print(int("1_024"))
print(int(True), int(False))
text = "12"
number = int(text)
print(number + 3, type(number).__name__)
print(text, type(text).__name__)

Resultado esperado:

0
123
1024
1 0
15 int
12 str

Asignar el valor convertido a otra variable no modifica la cadena original. Tras convertir "12", puede sumarle el número 3 y obtener 15. Si una cantidad no debe admitir valores booleanos, rechácelos expresamente en vez de confiar en que la conversión tenga éxito.

Truncar no es redondear ni aplicar floor

El truncamiento hacia cero elimina la parte fraccionaria con cualquier signo. En cambio, math.floor() devuelve el mayor entero que no supera el valor, de modo que difiere para negativos. Las columnas muestran el valor, int(), math.floor() y round().

import math

for value in (2.7, -2.7):
    print(value, int(value), math.floor(value), round(value))
2.7 2 2 3
-2.7 -2 -3 -3

Para -2.7, int() produce -2 y floor(), -3. Si necesita redondear, elija la función adecuada a su regla. Un float puede contener ya errores de representación; convertirlo a entero no recupera un valor decimal previsto que se haya perdido antes.

Leer binario y hexadecimal con base

int(text, base) especifica el sistema de numeración de la entrada. Se admiten bases 2–36 o 0; cero detecta prefijos como 0b, 0o y 0x. Con una base explícita, el primer argumento debe ser una cadena o un formato de bytes admitido, no un objeto numérico.

print(int("1010", 2))
print(int("ff", 16))
print(int("0xff", 0))
print(int("0b1010", 0))
print(int("010"))
print(int("010", 8))
try:
    print(int("010", 0))
except ValueError:
    print("ValueError")
10
255
255
10
10
8
ValueError

"010" vale diez en la base predeterminada y ocho en base ocho. La base cero rechaza esta forma con cero inicial y sin prefijo. El entero obtenido no guarda un formato de visualización hexadecimal; use hex() o format() por separado para presentarlo.

Errores y precisión de enteros grandes

Una representación incorrecta puede generar ValueError; un tipo no admitido, TypeError. El infinito genera OverflowError y NaN, que significa «no es un número», genera ValueError. Este ejemplo captura solo las excepciones previstas para seguir comprobando las entradas restantes.

for value in ("12.0", "1e3", "1,000", "", None, float("nan"), float("inf")):
    try:
        print(repr(value), int(value))
    except (ValueError, TypeError, OverflowError) as error:
        print(repr(value), type(error).__name__)
'12.0' ValueError
'1e3' ValueError
'1,000' ValueError
'' ValueError
None TypeError
nan ValueError
inf OverflowError

int(float(text)) cambia la política: interpreta notación decimal o exponencial y después trunca. Una cadena de entero grande puede perder información durante el paso por float debido a los límites de representación de la coma flotante.

text = "9007199254740993"
print(int(text))
print(int(float(text)))
9007199254740993
9007199254740992

Para leer un entero con exactitud, conviértalo directamente mediante int(text). Los enteros de Python no se limitan a un rango fijo de 32 o 64 bits, aunque la memoria y otros recursos siguen siendo finitos. Desde Python 3.11, los límites de conversión de cadenas enteras también pueden restringir conversiones muy largas en algunas bases. Limite las entradas externas a longitudes y valores útiles en vez de desactivar esas restricciones sin más.

Validar una cadena como cantidad no negativa

Convertir correctamente no demuestra que el valor sea válido para la aplicación. Esta función acepta cadenas, las convierte y rechaza resultados negativos. El cero está permitido, al igual que los signos, espacios y guiones bajos que admite int().

def parse_count(text):
    if not isinstance(text, str):
        raise TypeError("text must be a string")
    value = int(text)
    if value < 0:
        raise ValueError("count must be non-negative")
    return value

for text in (" 3 ", "-1", "2.5", ""):
    try:
        print(repr(text), parse_count(text))
    except ValueError:
        print(repr(text), "invalid count")
' 3 ' 3
'-1' invalid count
'2.5' invalid count
'' invalid count

Las cantidades inválidas generan ValueError. Una interfaz puede usar manejo de excepciones para solicitar otra entrada. Añada un máximo o una comprobación de cifras ASCII si su caso lo exige. Sustituir cualquier error por cero impediría distinguirlo de un cero auténtico.