Melhor tipo de dado para valores monetários

Senhores,

Qual o tipo de dado mais indicado para manipulação de valores monetários em java? double? BigDecimal?

double e mais indicado para valores com poucas casas decimais ja o bigdecimal vai te oferecer uma maior capacidade de armazenar numeros depois da virgula. se vc for gerenciar valors do tipo R$ que só imorta com as duas primeiras casa um double resolve seu caso agora se precisar de 20 casas decimais o double nao pode te ajudar.

1 curtida

Só use double se você não estiver preocupado com precisão, o que quase nunca é verdade quando lidamos com dinheiro, não é?

Acontece que double tem trocentas casas decimais que vão interferir na precisão do cálculo, enquanto, com o BigDecimal, é possível controlar a quantidade de casas decimais envolvida no cálculo.

Por exemplo, para postos de gasolina, casas de câmbio, use três casas decimais. Para comércio em geral, use duas.

Além disso, double ou float não garante que: 2 == 2,000…000. O que geralmente acontece é: 2 == 2,000…001, por exemplo.

Um exemplo de como isso pode atrapalhar: 0,00 x 10.000.000 = 0,00, certo? Agora calcule 0,000.000.231 x 10.000.000 e veja qual o resultado disso.

Lógico que esse foi um exemplo beeeeem dramático. O mais comum é que em cada transação dê diferenças imprevisíveis de centavos quando se usa double, que com o passar do tempo se torna um grande problema. Ou então, o operador do sistema tem que refazer os cálculos na mão e inserir no sistema. (Eu já vi isso acontecer!!)

Tem um pessoal do GUJ que trabalha com o setor financeiro; será que tem mais alguém pra comentar esse assunto?

T+!

1 curtida

Blz obrigado pelos exclarecimentos…

Caso eu use BigDecimal terei que trocar o atruibuto Double por BigDecimal…
E no BD pode continuar como está hoje, float8 ?

dá uma olhada neste artigo.