Ao trabalhar com floats em Python, você pode se deparar com a situação em que precisa limitar o número de casas decimais a duas, especialmente ao lidar com cálculos financeiros ou medições precisas. Neste tutorial vamos explorar por que isso acontece e como realizar o arredondamento de floats a duas casas decimais.
Entendendo a Representação de Números Flutuantes
O problema com os floats é que nem todos os números podem ser representados exatamente em forma binária, que é como os computadores armazenam dados. Isso ocorre porque os floats são armazenados como um inteiro dividido por uma potência de dois. Por exemplo, o número 13.95 é armazenado de forma semelhante a 125650429603636838/(2**53)
em dupla precisão, que tem 53 bits de precisão.
Aqui está um exemplo de como o Python lida com números flutuantes:
a = 0.1
b = 0.2
print (a + b) # Saída: 0.30000000000000004
Como você pode ver, o número armazenado na memória não é o mesmo que o número esperado como resultado dessa operação.
Formatando Números Flutuantes para Exibição
Se você precisa exibir um número com apenas duas casas decimais, você tem algumas opções:
Arredondando floats com Formatação de Strings
Você pode formatar o número como uma string com duas casas decimais:
print("%.2f" % a) # Saída: 13.95
print("{:.2f}".format(a)) # Saída: 13.95
Usando f-strings no Python 3.6+
O Python 3.6 introduziu as f-strings, que fornecem uma maneira mais legível de formatar strings:
print(f'{a:.2f}') # Saída: 13.95
Convertendo de Volta para Float
Se você precisa do resultado como um float, você pode envolver a string formatada com float()
:
g = float("{:.2f}".format(a))
print(g) # Saída: 13.95
No entanto, observe que converter a string de volta para um float não altera sua representação subjacente.
Usando a Função round()
Apesar dos problemas com a representação de números flutuantes, a função round()
funciona corretamente no Python 2.7 e posteriores:
print(round(14.22222223, 2)) # Saída: 14.22
Abordagens Alternativas
Se a precisão é crítica para a sua aplicação, considere estas alternativas:
- Use inteiros para armazenar valores em unidades menores (como centavos em vez de dólares) e converta para a unidade maior quando necessário.
- Use o módulo
decimal
, que fornece uma representação de número de ponto fixo.
Resumo
Neste artigo, discutimos os desafios de representar floats em Python e como exibi-los com duas casas decimais, arredondando estes floats. Cobrimos o uso de formatação de strings, f-strings e a função round()
para alcançar a saída desejada. Lembre-se, quando a precisão é fundamental, considere usar inteiros para unidades menores ou o módulo decimal
para representação de ponto fixo.
Cursos de programação gratuitos com certificado
Aprenda a programar e desenvolva soluções para o seu trabalho com Python para alcançar novas oportunidades profissionais. Aqui na Asimov você encontra:
- Conteúdos gratuitos
- Projetos práticos
- Certificados
- +20 mil alunos e comunidade exclusiva
- Materiais didáticos e download de código
Comentários