Dúvida Java
Qual tipo utilizar para números com casas decimais ? BigDecimal, Float ou Double ?
Qual tipo utilizar para números com casas decimais ? BigDecimal, Float ou Double ?
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.
boa pergunta, sempre utilizei double, utilizo BigDecimal pra arredontar mas o tipo de dados sempre double
Interessante o timing dessa pergunta Lucas, pois estava procurando a mesma coisa, mas para o Postgres. Desconheço como funciona no Java, mas uma das maiores preocupações nesse momento é a precisão das casas decimais e isso vai depender do caso de uso.
Em paralelo, se estiver precisando disso para mexer com valores monetários, sugiro usar um inteiro e na interface converter o valor.