Números, Booleanos e Aritmética
Python fornece inteiros de tamanho ilimitado, floats binários e tipos numéricos exatos para domínios que não podem tolerar erros de arredondamento. Booleanos participam da aritmética porque são subclasses de int.
Receita
from decimal import Decimal
price = Decimal("19.99")
tax = Decimal("0.0825")
total = price * (1 + tax)
a, b = 7, 3
print(a / b, a // b, a % b, divmod(a, b))Quando usar isso:
- Cálculos financeiros que exigem semântica decimal exata
- Computação científica com floats e tolerâncias
- Flags bitwise e protocolos de inteiros
- Testes de verdade em condições
ifewhile
Exemplo de Trabalho
from decimal import Decimal, ROUND_HALF_UP
from fractions import Fraction
def invoice_line(unit_price: str, qty: int, tax_rate: str) -> Decimal:
price = Decimal(unit_price)
tax = Decimal(tax_rate)
subtotal = price * qty
tax_amount = (subtotal * tax).quantize(Decimal("0.01"), rounding=ROUND_HALF_UP)
return subtotal + tax_amount
def float_trap() -> None:
print(0.1 + 0.2) # 0.30000000000000004
print(Fraction(1, 10) + Fraction(2, 10)) # 3/10 exato
def truthiness() -> None:
for value in [0, 1, "", "x", [], [0], None]:
print(repr(value), "->", bool(value))
if __name__ == "__main__":
print(invoice_line("19.99", 3, "0.0825"))
float_trap()
truthiness()O que isso demonstra:
Decimalconstruído a partir de strings evita artefatos binários de floatquantizecontrola o arredondamento para exibição de moedaFractionmantém números racionais exatos- Truthiness segue regras padrão: zero, vazio e
Nonesão falsy
Mergulho Profundo
Como Funciona
- int - Precisão arbitrária; limitado apenas pela memória.
- float - IEEE 754 duplo; rápido, mas inexato para muitos decimais.
- Decimal - Ponto flutuante base-10 com precisão configurável e modos de arredondamento.
- bool - Subclasse de
int;True == 1,False == 0. - Precedência de operadores - PEMDAS padrão; use parênteses para clareza.
Operadores em Resumo
| Operador | Significado | Notas |
|---|---|---|
/ | Divisão verdadeira | Sempre retorna float |
// | Divisão inteira (floor) | Arredonda em direção ao infinito negativo |
% | Módulo | O sinal segue o divisor em Python 3 |
** | Potência | Inteiros grandes podem crescer rapidamente |
& | ^ << >> | Bitwise | Apenas em inteiros |
Notas Python
import math
math.isclose(0.1 + 0.2, 0.3) # prefira sobre == para floats
int("ff", 16) # conversão de base
float("nan") != float("nan") # NaN não é igual a si mesmoArmadilhas
- Igualdade de float -
0.1 + 0.2 == 0.3é False. Correção:math.iscloseouDecimal. - Divisão inteira em negativos -
-7 // 3é-3, não-2. Correção: Lembre-se de arredondar para-inf. - Decimal a partir de float -
Decimal(0.1)herda a imprecisão do float. Correção:Decimal("0.1"). - bool é int -
True + Trueé igual a 2. Correção: Não use booleanos em somas, a menos que intencional. - Int grande para float - Converter inteiros enormes para float perde precisão. Correção: Permaneça em
intou useDecimal.
Alternativas
| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
Decimal | Dinheiro, impostos, faturamento | Matemática vetorial científica pesada |
Fraction | Matemática racional exata | Necessita de funções transcendentais |
numpy.float64 | Arrays numéricos | Aritmética simples de script |
Apenas int | Contagem, indexação | Necessita de valores fracionários |
FAQs
Por que 0.1 + 0.2 não é igual a 0.3?
Floats binários não podem representar 0.1 exatamente. A soma é próxima, mas não idêntica - use isclose ou Decimal.
Quando devo usar Decimal vs float?
Decimal para moeda e onde quer que os humanos esperem arredondamento em base-10. float para ciência, ML e desempenho.
O que é truthiness?
Objetos definem verdade através de __bool__ ou __len__. Contêineres vazios e números zero são falsy; a maioria dos outros objetos são truthy.
Como arredondo para exibição?
from decimal import Decimal, ROUND_HALF_UP
Decimal("2.675").quantize(Decimal("0.01"), rounding=ROUND_HALF_UP)O que // faz com números negativos?
Ele arredonda para baixo (floor): -7 // 3 é -3 porque floor(-2.33) é -3.
bool é um inteiro real?
bool é subclasse de int. isinstance(True, int) é True, mas use booleanos apenas para lógica, não para contagem.
Como analisar a entrada numérica do usuário com segurança?
Envolva int() / Decimal() em try/except ValueError, ou valide com uma biblioteca de esquema nos limites da API.
Para que serve divmod?
Retorna (a // b, a % b) em uma única chamada - comum para paginação e aritmética de relógio.
Os inteiros podem ser infinitamente grandes?
Sim em Python 3 - o limite prático é a memória. Criptografia e matemática de bigint dependem disso.
Como funcionam os operadores bitwise?
Eles operam em padrões de bits de inteiros - úteis para flags, máscaras e protocolos de baixo nível.
Relacionado
- Variáveis, Tipos e Tipagem Dinâmica - tipos de objeto e identidade
- Fluxo de Controle - truthiness em condicionais
- Strings e f-strings - formatando números na saída
- Noções Básicas de Dicas de Tipo - anotando tipos numéricos
Versões do Stack: Esta página foi escrita para Python 3.14.0 (estável 3.14, manutenção 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+ e uv 0.6+.