Em java sempre trabalhei com BigDecimal para valores monetários. Float também não é adequado.
E há casos que presenciei em sistemas ERP que trabalham com valores monetários com mais de duas casas decimais. Neste caso, usar um inteiro seria um problema.
Por que inteiro seria um problema? Teria como detalhar? Contando que saibamos onde começa as casas decimais, creio que basta apenas adicionar um 0 no cálculo. 3 casas = /1000 | 4 casas = /10000 e assim vai.
Nao vou responder pelo mauriciobinda
, mas eu vou expor a minha experiencia.
Eu trabalhei em um sistema financeiro que tambem tinha uma biblioteca privada para operacoes monetarias. A gente usave o BigDecimal para representar valores mas todas as operacoes (divisao, juros, etc) eram realizadas em uma biblioteca proprietaria.
Eu lembro que o caso simples era: Se tenho 10 e parcelo em 3 vezes quais sao os valores das parcelas? Com certeza nao pode ser `3.33333333` de uma divisao simples. Neste exemplo a biblioteca responderia algo do tipo `parcela_1=3.33`, `parcela_2=3.33`, `parcela_3=3.34` cuja soma 10.
Este era o caso mais simples, aumenta a dificuldade quando incluimos juros ou muitas entidades (client, banco, etc) no problema.
Mas este eh um caso mais especifico da nossa aplicacao. Faz muito tempo que trabalhei com isso, mas lembro que existem alguns padroes defenidos dependendo do tipo da entidade (banco vs corretora) etc.