Pessoal,
estou fazendo um programa que envolve vários cálculos.
Me disseram para usar BigDecimal para valores não inteiros para evitar problemas de arredondamento.
Mas surgiu uma dúvida. Tenho uma constante de sempre será de 2 casas decimais. Ex: 1,63.
Nesse caso também devo adotar o BigDecimal? Ou usar float ou outra coisa seria mais inteligente?
Float ou BigDecimal?
5 Respostas
Se o que está abaixo não for um problema pra vc… 
float k = 1.63f;
System.out.println( k-1.15f ); // 0.48000002
Se for fazer calculo monetario, nãooo use float nem double. Ao invés disso use BigDecimal… e se achar mto chato, use int/long, e faça o controle manual das casas decimais!
Espero ter ajudado!
Acho que double é o suficiente para a maioria dos aplicativos financeiro. O tipo float tem 7 casas decimais e o double tem 15 casas decimais, e que é adotado por padrão pelo java.
Att,
Ricardo
E tem alguma desvantagem na adoção do BigDecimal ao invés do double?
Ronaldo,
BigDecimal é mais lento. Mas não sei se é um tempo perceptivel. Também ocupa mais memória.
Márcio
Ronaldo,
só para entender, qdo vc faz calculos usando float/double a aritmetica é feita em binário, e não em decimal (como estamos acostumados a fazer), tornando impossivel a representação de “0.1”! Quer tentar?
1/(2^4) + 1/(2^5) + 1/(2^6) + 1/(2^7) + 1/(2^8) + 1/(2^9)... infinitamente
// Ps.: A partir de 1/(2^4) pq 1/(2^3) é igual a 0.125, o q ultrapassa 0.1!
E qdo chega no limite do tamanho do double (64) ou float (32), o valor é simplesmente truncado e arredondado! É por isso que os números acabam sendo aproximados, e não exatos. E é por isso tb que entram aquelas coisas bizarras de “(-)infinity” e “NaN”! 
Se for fazer operacao aritmetica e precisa de valor exato (ex. calculo monetario), jamais use double! Desvantagem? Nesse caso nenhuma! Pelo contrário, vc terá uma série de controle sobre precisão, arredondamento, etc.
Agora, para outros rarissimos casos, é possivel usar float/double sim! Vai ganhar em performance (o hardware é craque nisso)! Daí quem sabe pode fazer o uso da palavra chave mais obscura do planeta: strictfp!
Espero ter ajudado!