Converter cadeia numérica str to number int, flutuar em Python

O negócio

Se quiser converter uma cadeia de números para valores numéricos em Python, use int() para converter para inteiros e float() para converter para números de ponto flutuante.

O seguinte é explicado aqui, juntamente com o código da amostra.

  • Utilização básica
    • Converter cordas numéricas em números inteiros:int()
    • Converter uma sequência de números em números de ponto flutuante:float()
  • Utilização especial
    • Converte cordas em notação binária, octal, e hexadecimal para números
    • Converte cordas em notação exponencial para valores numéricos
    • Converter cadeias de numerais árabes de largura total em números
    • Converter uma sequência de caracteres chineses em números

Para converter um valor numérico para uma cadeia, usar str().

Se quiser converter números ou strings para vários formatos, utilize a função format() ou o método string str.format(). Depois pode converter para 0-fill, binário, octal, hexadecimal, notação exponencial, etc. Ver o artigo seguinte para detalhes.

Também pode converter uma lista de cordas em uma lista de números. Ver o artigo seguinte para detalhes.

Converter cordas numéricas em números inteiros: int()

Pode usar int() para converter uma sequência de números em números inteiros.

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

Decimais, incluindo pontos decimais, e cordas separadas por vírgulas, resultarão num 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'

As cadeias delimitadas por vírgula podem ser convertidas removendo a vírgula (substituindo-a por uma cadeia vazia) usando o método substituir().

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

Converter uma sequência de números em números de ponto flutuante: float()

Um float() pode ser utilizado para converter uma cadeia de números para um tipo de número de ponto flutuante.

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

As cordas com a parte inteira omitida são convertidas complementando a parte inteira com 0.

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

Cordas inteiras são também convertidas em números de ponto flutuante.

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

Converte cordas em notação binária, octal, e hexadecimal para números

Se um radix for especificado como segundo argumento para int(), a cadeia pode ser convertida para um int inteiro considerando-o como um int binário, octal, hexadecimal, etc.

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

Tal como nos exemplos anteriores, se omitido, o número é considerado como um número decimal.

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

Se o radix estiver definido em 0, a conversão é baseada no prefixo da corda. Ver abaixo os prefixos das cordas.

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

Os prefixos e alfabetos hexadecimais podem ser em maiúsculas ou 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

Ver o artigo seguinte para informações sobre a interconversão dos números e cordas binárias, octais e hexadecimais.

Converte cordas em notação exponencial para valores numéricos

As cordas em notação exponencial podem ser convertidas directamente para tipo flutuante com flutuador().

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'>

As letras minúsculas e também podem ser capitalizadas E.

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

Converter cadeias de numerais árabes de largura total em números

Os números arábicos de largura total podem ser convertidos directamente em números por int() ou float().

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

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

Contudo, se símbolos como menos e pontos decimais forem caracteres de largura total, será gerado um ValueError.

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

Os números podem ser convertidos sem problemas se forem caracteres de largura total, mas menos e pontos decimais são caracteres de meia largura. a conversão é possível através da substituição de símbolos de largura total por símbolos de meia largura usando o método de substituição().

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

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

Converter uma sequência de caracteres chineses em números

A função unicodedata.numeric() no módulo unicodedata pode ser utilizada para converter um único caractere chinês Unicode num número de tipo de número de ponto flutuante.

Se não se tratar de uma única letra, ocorrerá um erro. Além disso, os caracteres não numéricos causarão um erro.

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