Limitando Floats a Duas Casas Decimais

Ana Maria Gomes
4 minutos de leitura

Conteúdos do tutorial

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.

Inscreva-se gratuitamente e fique atualizado

Receba toda semana um resumo dos principais conteúdos da Asimov direto no seu e-mail. 100% livre de spam.

Áreas de interesse:
Conteúdos do tutorial