Limitar float a duas casas decimais em Python

Neste artigo você vai aprender a limitar float a duas casas decimais em Python, de uma maneira extremamente simples e fácil

Pra limitar um float a duas casas decimais em Python tu tem três caminhos principais: a f-string f"{n:.2f}" (a partir do Python 3.6), o método "{:.2f}".format(n) e a função round(n, 2). A f-string e o format devolvem uma string já formatada, com o número arredondado e completado com zeros à direita. O round() devolve um número, útil quando o valor vai seguir em outros cálculos. Pra cálculo financeiro preciso, use o módulo decimal com Decimal("valor").quantize(Decimal("0.01")), que foge das imprecisões do ponto flutuante.

limitar float a duas casas decimais em Python, de uma maneira extremamente simples e fácil

Fala programador(a), beleza? Bora aprender mais sobre Python e números com ponto flutuantes, os floats!

Algumas operações matemáticas podem gerar dizimas periódicas ou até mesmo números quebrados com diversas casas decimais

Para apresentação a um cliente final não é interessante exibir um número desta maneira

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

Então como podemos resumir ele?

Utilizando a função format, e escolhendo exatamente como o número deve se portar

Veja um exemplo prático:

n = 14.932939294234

n_formatado = "{:.2f}".format(n)

print(n_formatado) # 14.93

Veja que resumimos o número em 14.93, como issso foi possível?

Inserimos uma string, que representa um padrão, e é assim que o número será exibido

  • .2f = duas casas decimais de um float;

Utilizamos a função format, que recebe o nosso número de float para ser formato

E assim o resultado final é exibido por meio de print

Desta forma podemos formatar qualquer número em qualquer quantidade de casas decimais, basta alterar a string base

Conclusão

Neste artigo você aprendeu a como limitar float a duas casas decimais, utilizando a linguagem Python

Nós implementamos um padrão de string, que é como o número será formatado e aplicamos a função format no decimal

Desta maneira o número agora é exibido, com a quantidade de casas que precisamos para resolver nosso problema

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

Limitar float com f-string (a partir do Python 3.6):

Se tu tá numa versão mais nova do Python, dá pra fazer isso ainda mais limpo, com f-string

A f-string chegou no Python 3.6 e deixa tu formatar o número direto dentro da string, sem chamar o .format() na mão

n = 14.932939294234

print(f"{n:.2f}") # 14.93

A lógica é a mesma do format: o :.2f diz "duas casas decimais de um float"

Só que agora tá tudo numa linha só

muito mais direto né?

O que significa o .2f no Python?

Bora destrinchar esse .2f, que é o coração da formatação

O ponto e o 2 (o .2) dizem quantas casas tu quer depois da vírgula

O f trata o valor como float

Juntando, o .2f arredonda o número pra duas casas e, se faltar casa, completa com zero

Ex: o 5 vira 5.00, e o 14.9329 vira 14.93

E a função round()?

O format e a f-string devolvem uma string já formatada, prontinha pra exibir

Mas e se tu precisa do NÚMERO pra continuar fazendo conta? Aí entra o round()

O round() é uma função embutida do Python: tu passa o número e quantas casas quer

n = 14.932939294234

print(round(n, 2)) # 14.93

A diferença é importante: o round() devolve um número (float), não uma string

Então se tu só vai EXIBIR pro cliente, format ou f-string resolve

Se tu vai continuar calculando, o round() mantém o valor como número

Cuidado com o round() em cálculo de dinheiro:

Se liga nisso, porque já pegou muita gente de surpresa

Olha esse caso:

print(round(2.675, 2)) # 2.67

Ué, não era pra dar 2.68?

Não é bug do Python: é como o float guarda os números em binário

Várias frações decimais não têm representação exata em float, então o valor que fica guardado é levemente diferente de 2.675

Outro detalhe: o round() usa por padrão o arredondamento "round half to even" (o famoso arredondamento bancário), onde o meio vai pro par mais próximo

Pra cálculo financeiro, onde tu não pode errar um centavo, o caminho é o módulo decimal

from decimal import Decimal

valor = Decimal("2.675").quantize(Decimal("0.01"))

print(valor) # 2.68

Com o Decimal tu controla a precisão de verdade e foge das surpresas do ponto flutuante

Na prática, esse tipo de número quebrado quase nunca nasce no teu código: ele vem de fora, de uma API ou de um input que tu não controla, muitas vezes como texto que tu converte pra float antes de formatar. É aí que o arredondamento vira dor de cabeça. Vale abrir o terminal e rodar round(2.675, 2) com os teus próprios olhos: quando aparece 2.67 no lugar de 2.68 pela primeira vez, a ficha cai de que float não é confiável pra dinheiro. Por isso, em qualquer coisa que envolva centavo, o caminho é partir pro Decimal e parar de brigar com o ponto flutuante.

Perguntas frequentes

Como limitar um float a duas casas decimais em Python?

Use f"{n:.2f}" (f-string, a partir do Python 3.6), "{:.2f}".format(n) ou round(n, 2). As duas primeiras geram uma string formatada com arredondamento e zeros à direita; o round() devolve um número.

O que significa o .2f no Python?

No .2f, o .2 indica duas casas decimais depois da vírgula e o f trata o valor como float. O número é arredondado para duas casas e, se tiver menos casas, é completado com zeros (o 5 vira 5.00).

Qual a diferença entre .2f e round() em Python?

O .2f (via f-string ou format) devolve uma string já formatada, com os zeros à direita garantidos. O round() devolve um número (float), então nem sempre mostra as duas casas na exibição. Use .2f pra exibir e round() quando o valor vai continuar em cálculos.

Por que round(2.675, 2) retorna 2.67 em vez de 2.68?

Não é bug do Python. Muitas frações decimais não têm representação exata em float, então o valor guardado é levemente diferente de 2.675. Além disso, o round() usa por padrão o arredondamento bancário (round half to even). Pra precisão em dinheiro, use o módulo decimal com .quantize().

Como arredondar valores monetários com precisão em Python?

Use o módulo decimal: from decimal import Decimal e depois Decimal("2.675").quantize(Decimal("0.01")), que devolve 2.68. Assim você controla a precisão e evita as surpresas do ponto flutuante.

Leia também

Subscribe
Notify of
guest

7 Comentários
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Luan

Como faço pra não arredondar o valor?

Fernando

round()

Adélio Junior

obrigado pelas orientações!

Battisti

de nada Adélio!

wanderson

to aprendendo agora como faço pra deixar duas casas decimais só, eu sei que com .format() , da pra deixar e é bem facil, mas com formart no inicio eu ja fico perdido ex:
print(f’O VALOR EM DOLAR QUE VOCÊ TEM É US$:{d}’) >>>> dando o format no começo nao sei onde por o comando (:.2f) já no outro exemplo ali eu sei.
print(‘OVALOR EM DOLAR QUE VOCÊ TEM É US$:{:.2f}’.format(d))

Jônatan Leoncio de Souza Viana

você faz assim:
print(f’O valor em dolar que você tem é US$: {valor:.2f}’)


Jônatan Leoncio de Souza Viana

Com licença, como faço pra dar uma entrada com apenas duas casas decimais?
exemplo de entrada:
raio = float(input(‘Digite o raio do circulo: ‘))
exemplo de saída:
print(f’A área do circulo é {3.14159 * (raio ** 2):.4f}’)
eu preciso que o valor da entrada seja com no máximo duas casas flutuantes.

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