Olá Otávio.
Tudo bem?
Quando trabalhamos com dinheiro na programação, existe um problema muito comum que quase ninguém explica no começo: números decimais nem sempre são representados com precisão pelo computador.
Por exemplo, em várias linguagens:
print(0.1 + 0.2)
# 0.30000000000000004
Isso acontece porque computadores armazenam números decimais em binário, e muitos valores não conseguem ser representados exatamente.
Agora imagine isso em um sistema financeiro:
- juros
- descontos
- parcelas
- impostos
- milhares de operações por dia
Um pequeno erro de precisão pode virar um grande problema.
Por isso, uma das abordagens mais seguras é trabalhar com o menor valor inteiro da moeda.
Exemplo:
- R$ 10,50 → 1050 centavos
- R$ 3,99 → 399 centavos
Assim todos os cálculos são feitos usando int, evitando erros de arredondamento.
Depois, no final, o valor é formatado novamente para moeda.
Exemplo em Java:
int saldo = 1050;
int compra = 399;
int resultado = saldo - compra;
System.out.println(resultado); // 651 centavos
Formatando:
System.out.printf("R$ %.2f", resultado / 100.0);
// R$ 6,51
Em Python:
saldo = 1050
compra = 399
resultado = saldo - compra
print(f"R$ {resultado / 100:.2f}")
# R$ 6.51
Hoje existem bibliotecas específicas para lidar com dinheiro de forma precisa, como:
BigDecimal no JavaDecimal no Python
Exemplo com precisão correta em Python:
from decimal import Decimal
print(Decimal("0.1") + Decimal("0.2"))
# 0.3
Resumindo:
- Evite
float para dinheiro - Prefira inteiros (centavos) ou bibliotecas de precisão decimal
- Pequenos erros financeiros podem causar grandes prejuízos
Comenta aí qualquer duvida.
Bons estudos.