← Python na prática
05 / 10 · 23 MIN

Precisão, dados externos e tempo

Trata números decimais e timestamps sem pressupostos escondidos.

Compreender o conceito

Dados de CSV e APIs precisam de validação de esquema, valores e regras. Converter texto não prova validade funcional. Para aritmética decimal exata, Decimal construído a partir de texto evita importar a aproximação de um float. A regra de arredondamento e escala continua a precisar de definição explícita.

Aplicar e decidir

Um datetime sem fuso não identifica por si só um instante universal. Usa datas conscientes do fuso para eventos e preserva a data de negócio separadamente quando necessário. Mudanças de hora podem criar horas locais repetidas ou inexistentes. Ordenar strings com offsets diferentes não é uma estratégia geral segura para ordenar instantes.

Aplicação guiada no trabalho

Num ficheiro de cobranças fictício, a regra exige montantes finitos, não negativos e com duas casas decimais. Constrói Decimal a partir do texto original, sem passagem por float. Verifica is_finite antes de comparar limites: NaN pode ser representável sem ser um montante válido. Se o contrato permitir arredondamento, explicita o modo e a escala; quantize com ROUND_HALF_UP não é a mesma regra que HALF_EVEN. Se o contrato rejeitar casas adicionais, não as arredondes silenciosamente. Para timestamps, preserva offset ou fuso e informação que desambigue uma hora repetida. fold distingue ocorrências conhecidas, mas não descobre qual ocorreu. Converter um instante para UTC é diferente de acrescentar um rótulo UTC a uma hora local sem contexto.

Finitude antes das regras do montante

Construir Decimal a partir de texto não garante um montante finito. NaN e Infinity são representáveis e precisam de rejeição quando o domínio os proíbe. Usa is_finite antes das regras de escala, sinal e limites; decide ainda a política de arredondamento. Um token JSON e uma string contendo NaN atravessam caminhos de parsing diferentes. Não assumas que a configuração do decoder substitui a validação do campo.

Duração e instante usam referências diferentes

Usa diferenças de time.monotonic para orçamentos locais que não devem recuar quando a hora civil é ajustada. Não guardes o seu valor absoluto como timestamp UTC. Para relacionar instantes entre sistemas, conserva datas com offset e converte corretamente. No mesmo dia, 09:00 com offset +01:00 corresponde a 08:00 UTC, uma hora antes de 09:00 UTC. astimezone converte a representação preservando o instante; substituir apenas tzinfo pode mudar a interpretação do valor.

from decimal import Decimal
from datetime import datetime, timezone
amount = Decimal("0.1") + Decimal("0.2")
observed_at = datetime.now(timezone.utc)
NA PRÁTICA

Decimal("0.1") + Decimal("0.2") representa exatamente 0.3. Um evento pode ser armazenado em UTC e apresentado em Europe/Lisbon.

Armadilhas comuns

Construir Decimal a partir de float; aceitar NaN; escolher fold sem evidência.

Tópicos relacionados: Automação observável e repetível · Dados, tipos e decisões

Leva esta ideia contigo

Precisão numérica, validade do dado e interpretação temporal são decisões explícitas.

Criar conta

Referência: Python 3.14: Decimal arithmetic · Python 3.14; DR Python 2026.3

Python® é uma marca registada de Python Software Foundation. A dr.pt é uma plataforma de preparação independente e não está afiliada, associada, patrocinada, autorizada nem aprovada por Python Software Foundation. Os conteúdos e as perguntas são originais, não são perguntas oficiais de exame, e concluir os nossos testes não atribui nem garante qualquer certificação. Os nomes são usados apenas para identificar o tema. Todas as outras marcas pertencem aos respetivos titulares.