18.7. Money
Valor monetário = quantia + moeda, com aritmética segura.
Resumo
- Value Object com quantia e moeda. Nunca use float/double para dinheiro.
- Guarde a quantia em inteiro (centavos) ou decimal exato.
- Operações checam a moeda: somar BRL com USD é erro (ou exige conversão explícita).
- Alocação: dividir sem perder centavos (ex.: 100/3 → 33,34 + 33,33 + 33,33, ou por proporções).
- Arredondamento explícito; comparação por valor; formatação por moeda.
Perguntas-chave
responda de cabeça, depois abraPor que não usar float para dinheiro?
Ponto flutuante introduz erros de arredondamento (0,1 + 0,2 ≠ 0,3).
O que é alocação em Money?
Dividir uma quantia em partes (iguais ou por proporção) sem perder nem criar centavos.
O que acontece ao somar moedas diferentes?
Deve dar erro ou exigir conversão explícita.
Exercícios de fixação
0/5 respondidas1.
Uma conta de R$ 100,00 é dividida entre 3 pessoas e o sistema gera 33,33 × 3 = 99,99. Qual operação de Money resolve?
2.
Por que Money deve guardar a quantia em inteiros (centavos) ou decimal exato?
3.
Money(10, BRL).add(Money(5, USD)) deve:4.
Money é um caso de qual padrão mais geral?
5.
Como dividir R$ 0,05 na proporção 70% / 30% sem perder centavos?