Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Variável em java para trabalhar com dinheiro na casa dos trilhõ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.

4 respostas

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.

solução!

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.