Java: Qual é a melhor variável para programas que trabalham com dinheiro? ( Double, float, Bigdecimal )

Mais informações no site (Somaanyword)
Mais informações no site (Turing)

Resposta é BIGDECIMAL.

Float e Double são representados no hardware do computador com frações binárias. Isso significa que float e double são representados com números na base 2, enquanto nos valores financeiros são representados na base 10. Quando dividimos 1/3, se representarmos na base 10, receberemos o resultado 0,3333333…. Não conseguimos um resultado exato, ele acaba sendo aproximado. O Mesmo acontece com o valor “0.1” na base 2. Em base 2, 1/10 é uma fração binária que se repete infinitamente, sendo um valor aproximado.


Imagina o que acontece quando o computador arredonda o valor 0.1 no mundo financeiro , isso pode gerar um problema nos cálculos e errar alguns centavos nas transações bancárias.

Veja alguns exemplos de código.

Simples método de soma em DOUBLE:

Vamos somar 0.1 dez vezes no loop abaixo . O correto seria obter o resultado 1.0.

		double valorA = 0.1;
		double total = 0;
		for (int i=0 ; i<10 ; i++){
			total += valorA;
		}
		System.out.println(total);

Resultado:

0.9999999999999999

Mesmo programa em BIGDECIMAL:

		BigDecimal valorA = new BigDecimal("0.1");
		BigDecimal total = new BigDecimal("0");
		for (int i = 0; i < 10; i++) {
			total = total.add(valorA);
		}

		System.out.println(total);
1.0

Simples conta usando FLOAT:

		float valorA = 8250325.12f;
		float valorB = 4321456.31f;
		float total = valorA + valorB;
		System.out.println(NumberFormat.getCurrencyInstance().format(total));

Resultado:

R$ 12.571.782,00

Mesma conta usando BIGDECIMAL:

		BigDecimal valorA = new BigDecimal("8250325.12");
		BigDecimal valorB = new BigDecimal("4321456.31");
		BigDecimal total = valorA.add(valorB);
		System.out.println(NumberFormat.getCurrencyInstance().format(total));

Resultado:

R$ 12.571.781,43

Fiquem atentos quando trabalharem com monetização ou algo que exige precisão.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Blue Captcha Image
Atualizar

*

Facebook

Get the Facebook Likebox Slider Pro for WordPress
WordPress SEO fine-tune by Meta SEO Pack from Poradnik Webmastera