Convertir cadena de números str a número int, float en Python

Negocio

Si quieres convertir una cadena de números a valores numéricos en Python, utiliza int() para convertir a enteros y float() para convertir a números de punto flotante.

Aquí se explica lo siguiente, junto con un código de ejemplo.

  • Uso básico
    • Convertir cadenas numéricas en enteros:int()
    • Convertir una cadena de números en números de coma flotante:float()
  • Uso especial
    • Convierte cadenas en notación binaria, octal y hexadecimal a números
    • Convierte cadenas en notación exponencial a valores numéricos
    • Convertir cadenas de números arábigos de ancho completo en números
    • Convertir una cadena de caracteres chinos en números

Para convertir un valor numérico en una cadena, utilice str().

Si quieres convertir números o cadenas a varios formatos, utiliza la función format() o el método de cadena str.format(). Entonces puedes convertir a 0-lleno, binario, octal, hexadecimal, notación exponencial, etc. Consulte el siguiente artículo para obtener más detalles.

También puede convertir una lista de cadenas en una lista de números. Consulte el siguiente artículo para obtener más detalles.

Convertir cadenas numéricas en enteros: int()

Puede utilizar int() para convertir una cadena de números en números de tipo entero.

print(int('100'))
print(type(int('100')))
# 100
# <class 'int'>

Los decimales, incluidos los puntos decimales, y las cadenas separadas por comas darán lugar a un ValueError.

# print(int('1.23'))
# ValueError: invalid literal for int() with base 10: '1.23'

# print(int('10,000'))
# ValueError: invalid literal for int() with base 10: '10,000'

Las cadenas delimitadas por comas pueden convertirse eliminando la coma (sustituyéndola por una cadena vacía) mediante el método replace().

print(int('10,000'.replace(',', '')))
# 10000

Convertir una cadena de números en números de coma flotante: float()

Se puede utilizar float() para convertir una cadena de números en un tipo de número de punto flotante.

print(float('1.23'))
print(type(float('1.23')))
# 1.23
# <class 'float'>

Las cadenas con la parte entera omitida se convierten complementando la parte entera con 0.

print(float('.23'))
# 0.23

Las cadenas de números enteros también se convierten en números de punto flotante.

print(float('100'))
print(type(float('100')))
# 100.0
# <class 'float'>

Convierte cadenas en notación binaria, octal y hexadecimal a números

Si se especifica un radix como segundo argumento de int(), la cadena se puede convertir en un int entero considerándola como binaria, octal, hexadecimal, etc.

print(int('100', 2))
print(int('100', 8))
print(int('100', 16))
# 4
# 64
# 256

Como en los ejemplos anteriores, si se omite, el número se considera un número decimal.

print(int('100', 10))
print(int('100'))
# 100
# 100

Si el radix se establece en 0, la conversión se basa en el prefijo de la cadena. Véase más abajo los prefijos de cadena.

  • 0b
    • 0B
  • 0o
    • 0O
  • 0x
    • 0X
print(int('0b100', 0))
print(int('0o100', 0))
print(int('0x100', 0))
# 4
# 64
# 256

Los prefijos y los alfabetos hexadecimales pueden estar en mayúsculas o en minúsculas.

print(int('FF', 16))
print(int('ff', 16))
# 255
# 255

print(int('0xFF', 0))
print(int('0XFF', 0))
print(int('0xff', 0))
print(int('0Xff', 0))
# 255
# 255
# 255
# 255

Consulte el siguiente artículo para obtener información sobre la interconversión de números y cadenas binarios, octales y hexadecimales.

Convierte cadenas en notación exponencial a valores numéricos

Las cadenas en notación exponencial pueden convertirse directamente a tipo float con float().

print(float('1.23e-4'))
print(type(float('1.23e-4')))
# 0.000123
# <class 'float'>

print(float('1.23e4'))
print(type(float('1.23e4')))
# 12300.0
# <class 'float'>

La e minúscula también puede escribirse en mayúscula.

print(float('1.23E-4'))
# 0.000123

Convertir cadenas de números arábigos de ancho completo en números

Los números arábigos de ancho completo pueden convertirse directamente en números mediante int() o float().

print(int('100'))
print(type(int('100')))
# 100
# <class 'int'>

print(float('100'))
print(type(float('100')))
# 100.0
# <class 'float'>

Sin embargo, si los símbolos como el menos y los puntos decimales son caracteres de ancho completo, se generará un ValueError.

# print(float('ー1.23'))
# ValueError: could not convert string to float: '1.23'

Los números se pueden convertir sin problemas si son caracteres de ancho completo, pero los puntos negativos y decimales son caracteres de medio ancho. La conversión es posible sustituyendo los símbolos de ancho completo por los de medio ancho mediante el método replace().

print(float('-1.23'))
# -1.23

print(float('ー1.23'.replace('ー', '-').replace('.', '.')))
# -1.23

Convertir una cadena de caracteres chinos en números

La función unicodedata.numeric() del módulo unicodedata puede utilizarse para convertir un único carácter chino Unicode en un número de tipo numérico en coma flotante.

Si no es una sola letra, se producirá un error. Además, los caracteres no numéricos provocarán un error.

import unicodedata

print(unicodedata.numeric('五'))
print(type(unicodedata.numeric('五')))
# 5.0
# <class 'float'>

print(unicodedata.numeric('十'))
# 10.0

print(unicodedata.numeric('参'))
# 3.0

print(unicodedata.numeric('億'))
# 100000000.0

# print(unicodedata.numeric('五十'))
# TypeError: numeric() argument 1 must be a unicode character, not str

# print(unicodedata.numeric('漢'))
# ValueError: not a numeric character