Estou ciente de algumas boas opções :
Inteiros grandes (por exemplo, int64_t, mpz_t, qualquer bignum lib ) para representar centavos ou 10- n centavos - digamos, um número inteiro representa 1/100 de um centavo (US $ 1,05 == 10500). Isso é chamado de número inteiro em escala .
Biblioteca de alto nível para aritmética decimal de precisão arbitrária, como BigDecimal em Java, Decimal em Python, decimal.js em Javascript, boost :: multiprecision em C ++
Cordas.
BCDs compactados (decimais codificados binários) são um método mais esotérico que parecia popular em softwares antigos. Leia mais sobre isso.
No código de produção para bancos (ou cartões de crédito, caixas eletrônicos, sistemas POS), que tipo de dados é realmente mais usado? Estou especialmente perguntando a quem trabalhou em bancos.
EDIT: Links super úteis para aqueles com o mesmo domínio do problema (que precisam implementar uma estrutura de dados "monetária" que não se quebre).
- http://martinfowler.com/eaaDev/quantity.html
- http://www.codeproject.com/Articles/28244/A-Money-type-for-the-CLR
- http://c2.com/cgi/wiki?MoneyObject
- http://www.setfiremedia.com/blog/7-top-tips-for-coding-with-currency
- http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
EDIT para o sujeito que disse que esta é uma pergunta duplicada : Esta é uma questão prática, não teórica, de "qual é o melhor". Leia o título não editado da minha pergunta. Estou perguntando o que as pessoas viram em primeira mão nas bases de código dos bancos.
Eu sei que BigDecimal é "melhor", obviamente, mas APIs agradáveis como essa não estão disponíveis em todos os lugares, acredite ou não, e as bibliotecas decimais são caras em oposição às ints.