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