Como limitar números decimais em Python?

Neste artigo vamos aprender como limitar números decimais em Python, de uma forma simples com recursos da própria linguagem.

Pra limitar casas decimais em Python o caminho mais direto é a f-string

f"{valor:.2f}" mostra o número com 2 casas (o :.2f define quantas)

Se você quer arredondar o valor de verdade, e não só exibir, usa round(valor, 2), que devolve um número

Também dá pra usar "{:.2f}".format(valor), com o mesmo efeito da f-string

E quando é dinheiro ou você precisa de precisão, o recomendado é o módulo decimal com o método quantize()

limitar números decimais em Python capa

Fala programador(a), beleza? Bora aprender mais sobre Python!

Podemos resolver este problema, arredondando o número com a função round, por exemplo

Veja na prática:

numero = round(3.32424, 2)

print(numero) // 3.32

Onde o primeiro argumento é o número a ser arredondado e o segundo quantas casas decimais queremos exibir

Formação Vibe Coding
Formação Recomendada

Formação Vibe Coding

Do Prompt ao Produto: Crie Software Real com IA

  • 474 aulas
  • 20 projetos
  • 39h 27min

Podemos também formatar o número, escolhendo também quantas casas vamos exibir, veja:

numero2 = 4.38991

print("%.2f" % numero2) // 4.39

Dessa forma utilizamos uma sintaxe especial do Python para formatar o número da forma que precisamos

Também é possível utilizar o recurso de format, que veio na versão 3 do Python

Tornando ainda mais fácil formatar o número com casa decimal, veja:

teste = 7.98562434234
print('O valor de teste formatado é {:.4f}'.format(teste))

Bem parecido com o nosso segundo exemplo, porém este já fico incluso no print

E sua sintaxe também é fácil de entender, podemos decidir o número de casas

Conclusão

Neste artigo vimos como limitar números decimais em Python

Utilizamos a função round que aceita como parâmetros o número em float e também quantas casas queremos que ele seja arredondado

Também vimos uma outra maneira formatando o número, utilizando uma sintaxe especial do Python

Confira também nosso catálogo de cursos gratuitos, com aulas semanais no YouTube

Adicionar uma seção sobre f-strings, o jeito mais usado hoje pra formatar casa decimal. Exemplo: valor = 3.14159 e print(f"{valor:.2f}") mostrando 3.14. Explicar que o :.2f dentro das chaves define quantas casas aparecem, que é a forma mais limpa e direta e que está disponível a partir do Python 3.6 (PEP 498). Fechar com o gancho de que hoje qualquer versão do Python já tem f-string, já que a série estável atual é a 3.14.

Adicionar um alerta sobre a pegadinha do round. Mostrar que round(2.675, 2) devolve 2.67 e não 2.68 por causa da representação binária de float (não é bug, está na documentação oficial do Python sobre ponto flutuante). E explicar que o round do Python usa arredondamento bancário (round half to even), por isso round(0.5) dá 0 e round(2.5) dá 2, seguindo o IEEE 754.

Apresentar o módulo decimal pra arredondamento decimal preciso, que é o recomendado pela documentação do Python. Mostrar o uso de Decimal com o método quantize() pra fixar o número de casas, citando que existem modos de arredondamento como ROUND_HALF_UP e ROUND_HALF_EVEN. Deixar claro que pra valor de dinheiro esse é o caminho, não o float puro.

Inserir um FAQ em formato de perguntas e respostas cobrindo as buscas reais: como limitar casas decimais, diferença entre round e formatar com f-string, por que round(2.675, 2) dá 2.67 e como arredondar dinheiro.

Sou o Matheus, dou aula de Python faz tempo, e na prática quase ninguém usa round só pra mostrar valor na tela

A gente vai de f-string mesmo, é mais limpo e já sai formatado

O round eu guardo pra quando preciso do número arredondado pra usar depois, não só exibir

E o pulo do gato que sempre mostro pra galera: abre o terminal e roda round(2.675, 2)

Ele devolve 2.67, não 2.68, e aí cai a ficha de que não é bug, é o float sendo float

Quando o número é dinheiro eu nem arrisco, vou direto no módulo decimal, aí o arredondamento sai redondo de verdade

Bora testar?

Perguntas frequentes

Como limitar casas decimais em Python?

Três jeitos rápidos: f-string com f"{valor:.2f}" pra exibir com 2 casas, round(valor, 2) pra arredondar o número de verdade, ou "{:.2f}".format(valor)

O :.2f é onde tu escolhe a quantidade de casas, é só trocar o 2

Qual a diferença entre round() e formatar com f-string?

O round arredonda o valor e devolve um número, então serve quando tu vai usar esse resultado em outra conta

A f-string (e o format) só mudam a forma como o número aparece, o retorno é uma string

Se é só pra mostrar na tela, f-string é mais limpo, se tu precisa do número arredondado pra reusar, vai de round

Por que round(2.675, 2) retorna 2.67 e não 2.68?

Não é bug do Python, é o float sendo float

Muitos decimais não têm representação binária exata, então o 2.675 guardado na memória é um tiquinho menor, e o arredondamento segue esse valor real

A própria documentação do Python explica isso na parte de ponto flutuante

Quando isso te atrapalha, usa o módulo decimal

Por que round(0.5) dá 0 em Python?

Porque o round do Python usa arredondamento bancário (round half to even), que arredonda a metade pro número par mais próximo, seguindo o padrão IEEE 754

Por isso round(0.5) vira 0 e round(2.5) vira 2

Não é erro, é o comportamento padrão da função

Como arredondar valores de dinheiro em Python?

Pra dinheiro, larga o float e vai de módulo decimal

Cria o número com Decimal e usa o método quantize() pra fixar as casas, escolhendo o modo de arredondamento (por exemplo ROUND_HALF_UP)

É o caminho que a documentação do Python recomenda pra ter arredondamento correto

Leia também

Subscribe
Notify of
guest

12 Comentários
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Aline Nascimento

Obrigada!

Battisti

de nada Aline 🙂

kiko

simples e direto, obrigado

Battisti

valeu Kiko, até mais! 🙂

Tiago Chaves

Boa noite, primeiro parabéns pelo blog…

Uma duvida, em casos em que eu queira dividir um valor 100 por 3 mas nao gostaria que ficasse uma dizima infinita. Como fazer para ficar da seguinte forma:

100 / 3 pessoas

p1 = 33
p2 = 33
p3 = 34

Existe como usar o round para isso?

Battisti

Opa Tiago, você pode converter o número final para inteiro, já tentou?

Felipe Hack

você faz assim:

divisao = 100 / 3
teste = round(divisao,2)
print(divisao)

espero ter ajudado!

pery

print(teste)

Arthur

Valeuuu!

Battisti

de nada Arthur!

Davi Araujo

Ajudou muito!!! Valeu fessor

Battisti

valeu Davi!

Formações

Formação SAAS com IA

Formação SAAS com IA

Tire usas ideias do papel criando softwares com IA, integre pagamentos e lance seu projeto!

  • 291 aulas
  • 18 projetos
  • 24h 17min

Blog | Mais populares