Serkronyx
3/16/2018 - 5:28 PM

BigDecimal/Carga de operadores

BigDecimal

BigDecimal es un tipo de varibale que se utiliza para realizar calculos exactos, por lo que es recomendable usarlo para esto, un ejemplo de cómo se usa es el siguiente:

public class Main {

    public static void main(String[] args) {
        double a = 0.02;
        double b = 0.03;
        double c = b - a;
        
        System.out.println(c);
        //0.009999999999999998
    }
}

El resultado esperado sería 0.01 pero al hacerlo con el tipo de dato double/float obtendremos el resultados 0.009999999999999998.

Si el valor que se le manda a un BigDecimal es un double/float, para que sea calculado con exactitud lo que se tiene que hacer es convertir el valor a cadena por ejemplo:

public class Main {

    public static void main(String[] args) {
        double b = .02;
        double d = .03;
        
        BigDecimal _a = new BigDecimal(String.valueOf(b));
        BigDecimal _b = new BigDecimal(String.valueOf(d));
        BigDecimal _c = _b.subtract(_a);
        
        System.out.println(_c);
        //0.01
    }

}

Carga de operadores

Cuándo a un objetos se le asigna un valor númerico en java no existe la sobre carga de operadores por lo que no se podría hacer los siguiente:

BigDecimal _a = new BigDecimal(6);
BigDecimal _b = new BigDecimal(4);
BigDecimal _c = _b + _a;

La solución sería la siguiente:

BigDecimal _a = new BigDecimal(String.valueOf(b));
BigDecimal _b = new BigDecimal(String.valueOf(d));
BigDecimal _c = _b.subtract(_a);

Se utilizan métodos para poder hacer operaciones entre objetos, se pueden diseñen los métodos a las necesidades del usuario o se pueden utilicen los métodos que trae por defecto la clase que se este ocupando, en este caso vemos el método substract().

Reducción de decimales

Para realizar la reducción de los decimales sin redondear se debe utilizar la siguiente funcion con los elementos:

Double answer = 234.32545;
BigDecimal formatNumber = new BigDecimal(answer);
formatNumber = formatNumber.setScale(2, RoundingMode.DOWN);
System.out.println(formatNumber);