Float ou BigDecimal?

5 respostas
R

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?

5 Respostas

G

Se o que está abaixo não for um problema pra vc… :wink:

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!

R

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

R

E tem alguma desvantagem na adoção do BigDecimal ao invés do double?

M

Ronaldo,

BigDecimal é mais lento. Mas não sei se é um tempo perceptivel. Também ocupa mais memória.

Márcio

G

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”! :wink:

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!

Criado 18 de julho de 2005
Ultima resposta 19 de jul. de 2005
Respostas 5
Participantes 4