Como arredondar um número em Python (função round() e decimal)

Aprenda como arredondar números de ponto flutuante em Python. Entenda o arredondamento do Banker, a precisão decimal personalizada e os flutuadores de formatação para exibição.

Experimente esta solução no Editor

Visão geral

A aritmética de ponto flutuante em computadores às vezes pode levar a problemas inesperados de precisão devido à forma como os sistemas binários armazenam decimais (por exemplo, `0,1 + 0,2` avaliado como `0,30000000000000004`). Ao renderizar números aos usuários ou preparar métricas, o arredondamento dos números é um requisito comum. Python oferece várias maneiras de conseguir isso.

A ferramenta principal é a função integrada `round(number, ndigits)`. É necessário um número e uma contagem de precisão opcional. Se `ndigits` for omitido, ele será arredondado para o número inteiro mais próximo. Se `ndigits` for fornecido, ele arredondará para esse número de casas decimais.

Uma propriedade chave da função `round()` do Python é que ela usa o "arredondamento do banqueiro" (arredondado pela metade para par). Quando um número está exatamente no meio do caminho entre dois inteiros (por exemplo, `2,5` ou `3,5`), o Python arredonda para o número *par* mais próximo. Isso significa que `round(2.5)` é `2` e `round(3.5)` é `4`. Embora matematicamente justo em grandes conjuntos de dados para evitar viés ascendente, para cálculos financeiros precisos você deve usar as ferramentas de quantização do módulo `decimal`.

Saída de código e execução

Este script demonstra o arredondamento de pontos flutuantes usando a função round integrada, os exemplos de arredondamento do Banker e o módulo decimal.

round_numbers.py
Experimente no Editor
from decimal import Decimal, ROUND_HALF_UP

val = 3.14159

# 1. Round to nearest integer
print("Nearest Integer:", round(val))

# 2. Round to 2 decimal places
print("Two decimals:", round(val, 2))

# 3. Banker's Rounding demonstration (rounds to nearest even)
print("round(2.5):", round(2.5)) # Nearest even is 2
print("round(3.5):", round(3.5)) # Nearest even is 4

# 4. Math rounding up (Traditional rounding) using decimal module
amount = Decimal("2.5")
rounded_up = amount.quantize(Decimal("1"), rounding=ROUND_HALF_UP)
print("Decimal ROUND_HALF_UP (2.5):", rounded_up)
Saída terminal
Nearest Integer: 3
Two decimals: 3.14
round(2.5): 2
round(3.5): 4
Decimal ROUND_HALF_UP (2.5): 3

Implementação passo a passo

  • Chame a função integrada round(number) para arredondar um ponto flutuante para o número inteiro mais próximo.
  • Passe um segundo argumento (por exemplo, round(num, 2)) para especificar o número de casas decimais a serem mantidas.
  • Use o módulo decimal com ROUND_HALF_UP para cálculos de arredondamento financeiro rigorosos.

Perguntas frequentes

Por que round(2.5) retorna 2 em vez de 3 em Python?

Python usa o arredondamento de Banker, que arredonda metade dos números para o número inteiro par mais próximo. Isso reduz o viés estatístico (arredondar metade dos números sempre causa um ligeiro desvio ascendente em grandes conjuntos de dados).

Como faço para arredondar um número sempre para cima ou sempre para baixo?

Importe o módulo matemático e use math.ceil(x) para arredondar para o próximo número inteiro ou math.floor(x) para arredondar para baixo para o número inteiro anterior.

Tópicos Relacionados

Recursos Python recomendados

Expanda seu conhecimento com tutoriais interativos relacionados, folhas de dicas e comparações de código.