Introdução
Um problema que encontrei quando comecei a utilizar BigDecimal foi exatamente o fato de conseguir manipular
os números quando utiliza essa tipagem.
Abaixo explico de maneira simples como manipular valores em BigDecimal. Vale salientar que x e y são valores do tipo BigDecimal.
Arredondamento de casas decimais
Para realizar o arredondamento utilizaremos o método x.setScale(int,int). Onde o primeiro parametro é
a quantidade de casas decimais e a segunda o tipo de arrendamento.
Código utilizado:
package com.blogspot.maguscode;
import java.math.BigDecimal;
import java.math.RoundingMode;
public class TesteBigDecimal {
public static void main(String args[])
{
BigDecimal numero = new BigDecimal(20.005);
//Especificar arredondamento de casas decimais
System.out.println("Visualização do número(20.005) arredondado(duas casas decimais):");
//Só será arrendodado para o número maior se a difernça for maior que 0.5
System.out.println("(Arredondamento para baixo): "+numero.setScale(2,RoundingMode.DOWN));
//Só será arrendodado para o número maior se a diferença for maior ou igual a 0.5
System.out.println("(Arredondamento para cima): "+numero.setScale(2,RoundingMode.UP));
}
}
No primeiro caso o número é arredondado para cima ou seja o número 20.005 passa a ser 20.01.
No segundo caso o número é arredondado para baixo ou seja o número 20.005 passa a ser 20.00.
Operações de comparação
Para fazer operações de comparação não é possível usar (>,<,==) como no caso dos números primitivos (int,double,float,long) é necessário utilizar a anotação x.compareTo(y).
Por padrão o retorno desta função será:
-1 - para x menor que y.
0 - para x igual a y.
1 - para x maior que y.
Abaixo é possível visualizar alguns exemplos:
Código utilizado:
package com.blogspot.maguscode;
import java.math.BigDecimal;
public class TesteBigDecimal {
public static void main(String args[])
{
BigDecimal numero = new BigDecimal(20.005);
int valorRetorno;
//Repostas x.compareTo(y):
//1 x maior que y
//0 x igual a y
//-1 x menor que y
System.out.println("\n\n");
System.out.println("Comparações");
valorRetorno = numero.compareTo(new BigDecimal(20.001));
System.out.println("Caso 1 (MaiorQue): " + valorRetorno);
valorRetorno = numero.compareTo(new BigDecimal(20.006));
System.out.println("Caso 1 (MenorQue): " + valorRetorno);
valorRetorno = numero.compareTo(numero);
System.out.println("Caso 1 (Igual):" + valorRetorno);
}
}
Operação matemáticas simples.
Quando se utiliza números do tipo BigDecimal não é possível realizar operações basicas entre ele como se fossem números primitivos, para resolver tal problema é necessário utilizar:
x.substrac(y) equivale a x-y.
x.add(y) equivale a x+y.
x.div(y) equivale a x/y.
x.mult(y) equivale a x*y.
Código utilizado:
package com.blogspot.maguscode;
import java.math.BigDecimal;
public class TesteBigDecimal {
public static void main(String args[])
{
System.out.println("Operações básicas:");
BigDecimal numeroParaOperacoes= new BigDecimal(20);
//Operação de soma x.add(y)
System.out.println("Soma: "+ numeroParaOperacoes.add(BigDecimal.TEN));
//Operação de soma x.substract(y)
System.out.println("Subtração: "+numeroParaOperacoes.subtract(BigDecimal.TEN));
//Operacao de divisao x.divide(y)
System.out.println("Divisão: "+numeroParaOperacoes.divide(BigDecimal.TEN));
//Opeação de multiplicação x
System.out.println("Multiplicao: "+numeroParaOperacoes.multiply(BigDecimal.TEN));
}
}