Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Como converter automaticamente números com vírgula e separadores de milhar para float no Python?

No Python, sempre que tenho que digitar um número no formato "brasileiro", como "1.000.000,50", eu preciso usar vários .replace('.', '') e .replace(',', '.') para conseguir converter para float.

Exemplo:

valor = "1.000.000,50"
valor = valor.replace('.', '').replace(',', '.')
valor = float(valor)

Segue o erro para ilustrar:

Informe a quantidade de vendas do ano de 2022: 1.000.000,50

ValueError Traceback (most recent call last)
/tmp/ipython-input-1270060344.py in <cell line: 0>()
----> 1 vendas_2022 = float(input('Informe a quantidade de vendas do ano de 2022: '))
2 vendas_2023 = float(input('Informe a quantidade de vendas do ano de 2023: '))
3
4 variacao = (vendas_2023 - vendas_2022) / vendas_2022 # fração (0.2 = 20%)
5

ValueError: could not convert string to float: '1.000.000,50'


Existe alguma forma mais prática ou inteligente de fazer essa conversão sem precisar ficar encadeando vários .replace() manualmente toda vez?

Gostaria de algo que funcione para diferentes formatos, como:

1.234,56
1234,56
123.456.78
2.500

Obrigado!

2 respostas
solução!

Olá, Yuri! Como vai?

Ótima pergunta! Esse tipo de conversão é super comum em dados financeiros, e realmente ficar encadeando .replace() não é a forma mais elegante ou escalável.

O módulo locale do Python permite lidar com formatos numéricos regionais, incluindo o brasileiro. Veja como usar:

import locale
valor = "1.000.000,50"

# Define o locale para português do Brasil
locale.setlocale(locale.LC_ALL, 'Portuguese_Brazil.1252')

# Converte string para float usando o locale
valor_float = locale.atof(valor)

print(valor_float)
print(type(valor_float))

Resultado:

1000000.5
<class 'float'>

Vou deixar o print desse código sendo executado na minha máquina:

Trecho de código em Python demonstrando as configurações de localidade para converter uma string com formato brasileiro em um float. A saída mostra o valor e o tipo convertidos.

Mas... tem uma observação! Essa solução pode não funcionar em alguns ambientes, no Google Colab, por exemplo:

Erro de rastreamento no código Python ao definir localidade para português do Brasil; tentativas de converter uma string para float falham.

Se você tentar executar, um erro será apresentado, afirmando que a configuração do locale não é suportada.

Diferente do Jupyter Notebook, que executa o código normalmente:

Captura de tela de um Jupyter Notebook mostrando código Python que importa o módulo locale e converte uma string formatada no Brasil em um float.

Uma solução alternativa que funciona no Google Colab é usando expressões regulares. Assim:

import re
valor = "1.000.000,50"

def br_to_float(valor_str):
    # Remove todos os pontos que são separadores de milhar
    valor_str = re.sub(r'\.(?=\d{3}(?:\.|,|$))', '', valor_str)

    # Substitui vírgula decimal por ponto
    valor_str = valor_str.replace(',', '.')

    return float(valor_str)

print(br_to_float(valor))
print(type(br_to_float(valor)))
1000000.5
<class 'float'>

Repare que não há erro:

Trecho de código Python demonstrando uma função que converte uma string numérica no formato brasileiro para um float. Exibe o resultado e o tipo.

Espero ter ajudado e fico à disposição se precisar.

Abraço e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado

Muito obrigado pela resposta. Ela é de grande ajuda. Vou printar e praticar visando exercícios e estudos!!!