Mostrando postagens com marcador operações. Mostrar todas as postagens
Mostrando postagens com marcador operações. Mostrar todas as postagens

quarta-feira, 16 de maio de 2012

Manipulando BigDecimal

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));
    }
   
   
}