Skip to main content

LocalContext | Decimal | Python

  • LocalContext | Decimal | Python

Em Python, localcontext é uma função do módulo decimal que serve para criar um contexto decimal temporário — ou seja, um ambiente local onde você pode mudar regras de arredondamento, precisão, tratamento de erros numéricos, etc., sem afetar o contexto global do programa.


🔍 Contexto: módulo decimal

O módulo decimal fornece aritmética de ponto flutuante com precisão controlada, útil para cálculos financeiros e científicos.

O comportamento do módulo é controlado por um contexto decimal (decimal.Context), que define:

  • Precisão (prec)
  • Modo de arredondamento (rounding)
  • Flags e traps de exceção (como DivisionByZero, Overflow, etc.)

⚙️ decimal.localcontext()

A função localcontext() cria um contexto temporário, geralmente usado com with.

Exemplo básico:

from decimal import Decimal, localcontext

# Contexto global
a = Decimal('1') / Decimal('7')
print(a) # mostra 0.1428571428571428571428571429 (depende da precisão global)

# Contexto local temporário
with localcontext() as ctx:
ctx.prec = 5 # muda a precisão apenas dentro do bloco
b = Decimal('1') / Decimal('7')
print(b) # mostra 0.14286

# fora do bloco, o contexto volta ao normal
c = Decimal('1') / Decimal('7')
print(c) # volta à precisão global original

🧠 O que acontece internamente

  • localcontext() faz uma cópia do contexto atual (getcontext()).
  • Você pode modificar essa cópia dentro do bloco with.
  • Assim que o bloco termina, o contexto antigo é automaticamente restaurado.

💡 Exemplo prático (cálculos financeiros)

from decimal import Decimal, localcontext, ROUND_HALF_UP

valor = Decimal('10.125')

with localcontext() as ctx:
ctx.prec = 6
ctx.rounding = ROUND_HALF_UP
resultado = valor.quantize(Decimal('0.01'))
print(resultado) # 10.13

Aqui, garantimos que o arredondamento siga a regra “meio para cima” (ROUND_HALF_UP), comum em finanças.


📦 Resumo rápido

FunçãoO que faz
decimal.getcontext()Obtém o contexto global atual
decimal.setcontext(ctx)Define um novo contexto global
decimal.localcontext(ctx=None)Cria um contexto temporário (com base no atual ou em outro fornecido)