Caros, bom dia.
Alguém poderia, por favor, me recomendar uma variável em java para trabalhar com dinheiro na casa dos trilhões? Estou usando BigDecimal, porém só comporta valores até 2 bilhões.
Caros, bom dia.
Alguém poderia, por favor, me recomendar uma variável em java para trabalhar com dinheiro na casa dos trilhões? Estou usando BigDecimal, porém só comporta valores até 2 bilhões.
Olá Thiago, tudo bem com você?
Acredito que BigDecimal
é a variável que acumula a maior quantidade possível, entretanto, não entendi essa limitação do 2 bilhões, eu fiz um pequeno teste e consegui armazenar valores bem maiores, por exemplo:
jshell> BigDecimal trilhao = new BigDecimal(1_000_000_000_000d);
trilhao ==> 1000000000000
jshell> BigDecimal dez = new BigDecimal(10);
dez ==> 10
jshell> BigDecimal resultado = trilhao.multiply(dez);
resultado ==> 10000000000000
jshell>
Acredito que você não irá conseguir inserir sem adicionar o d
no final, pois ai ele irá exceder o limite máximo de um inteiro, ao explicitamente declarar que se trata de um double não teremos esse problema :)
Abraços e Bons Estudos!
Obrigado pelo retorno Geovani. Sobre a limitação que mencionei, quando eu coloco um número com mais de 10 casas, aparece erro que ultrapassou o limite máximo. Mas colocando o "d" no final do número realmente funciona. Porem, no meu caso o número que armazenará o trilhão é o resultado de uma multiplicação de 2 números. Como faço para colocar o "d" no final do número em cenários como esse:
BigDecimal a = new BigDecimal(1000000000);
BigDecimal b = new BigDecimal(100);
BigDecimal c = a.multiply(b d);
Repare no código acima que tentei colocar o "d" no final mas não deu certo.
Olá Thiago, tudo bem?
Antes de mais nada peço perdão pela demora, não tive conexão de internet nesses últimos dias para conseguir lhe responder :/
Em relação a sua dúvida, eu fiz alguns testes, e quando o valor gerado é de trilhão ou superior, mas as parcelas (a e b) não atingem o limite inteiro, não há problemas veja:
public class Exemplo {
public static void main(String [] args) {
BigDecimal a = new BigDecimal(1000000000);
BigDecimal b = new BigDecimal(1000000000);
BigDecimal c = a.multiply(b);
System.out.println(c);
}
}
O resultado no console é:
>> 1000000000000000000
"Formatando"
>> 1_000_000_000_000_000_000
Que no caso equivale a 1^18 (um quintilhão) sem problemas algum, veja que não adicionei o d
neste caso, pois para o resultado não há problemas :)
Uma coisa que pode influenciar, mas acredito que não, é a versão do java utilizado, entretanto acredito que do 11 ou superior, o resultado será possível, pois trabalhamos com precisão infinita :)
Abraços e Bons Estudos!
Sem problemas! Muito obrigado Geovani.