Então Lucas, você pode utilizar qualquer um desses tipos de dados. Pra saber qual deles utilizar, vc deve levar em consideração a precisão (quantidade de casas decimais) necessária para tua aplicação. float
e double
são sempre aproximações utilizando o padrão IEEE 754. O tipo float
utiliza 32 bits e consegue representar números de até 7 casas decimais. O double
consome 64 bits e representa números de até 15 casas decimais. Já o BigDecimal
tem precisão quase infinita, ou seja, teoricamente vc consegue representar números com bilhões de casas decimais. Porém, a aritmética de BigDecimal
s é bem mais lenta e também não rola utilizar os operadores + - * e /.
// Embora o construtor de BigDecimal também aceite double,
// isso não é considerado boa prática. Use sempre que possível
// strings.
BigDecimal a = new BigDecimal("0.1");
BigDecimal b = new BigDecimal("0.2");
// Somar a + b
a.add(b);
// Subtrair a - b
a.subtract(b);
Em linhas gerais, se for trabalhar com valores monetários, use BigDecimal
. Para quase todo o resto, provavelmente float
ou double
serão suficientes.