Usualmente cuando trabajamos con montos de dinero en nuestras aplicaciones java, podemos elegir varios tipos de datos como Integer, Double, Long, entre otros, sin embargo, a lo largo de los años he visto que la precisión de cálculos decimales de estas clases no es 100% precisa y puede generar perdida de integridad cuando se realizan cálculos muy precisos, sobretodo que requieran una exactitud decimal alta.

Es por ello que, lo mas recomendable es usar la clase BigDecimal, esta clase se enfoca principalmente en lograr una mayor exactitud para manejar montos con decimales muy grandes o muy pequeños.

Implementar BigDecimal

Primero debemos importar la clase BigDecimal usando import java.math.BigDecimal, posteriormente, veamos como crear valores de tipo BigDecimal:

import java.math.BigDecimal;//Importamos la clase BigDecimal
public class Main  {

    public static void main(String[] args) {
        BigDecimal monto1 = new BigDecimal("100000.00");//String
        System.out.println(monto1);
        BigDecimal monto2 = new BigDecimal(1000);//Integer
        System.out.println(monto2);
        BigDecimal monto3 = new BigDecimal(1000.45);//Double
        System.out.println(monto3);
    }
}

Nota: Los decimales de BigDecimal deben ser con punto y no con coma, sino al convertir el valor a BigDecimal dará error.

Salida:

Comparar valores con BigDecimal

A diferencia de los operadores normales para realizar calculos en Integer, Double o Long como >,<, !=, en BigDecimal debemos usar funciones que nos permitan comparar un valor con otro, para ello utilizaremos compareTo()

CompareTo nos devolverá 3 valores dependiendo lo que queramos comparar:

  • 1 Cuando el primer valor BigDecimal sea mayor que el segundo valor BigDecimal.
  • 0 Cuando el primer valor BigDecimal sea igual que el segundo valor BigDecimal.
  • -1 Cuando el primer valor BigDecimal sea menor que el segundo valor BigDecimal.

Esto lo podemos representar de la siguiente forma:

Si queremos validar si el monto1 es mayor al monto 2 o si el monto1 es mayor o igual al monto2, los haremos de la siguiente manera:

import java.math.BigDecimal;
public class Main  {

    public static void main(String[] args) {
        BigDecimal monto1 = new BigDecimal("100000.00");
        BigDecimal monto2 = new BigDecimal(10000);

        if(monto1.compareTo(monto2)==1){
            System.out.println("El monto1 es mayor al monto2");
        }

      	if(monto1.compareTo(monto2)>=0){
            System.out.println("El monto1 es mayor o igual al monto2");
        }

    }
}

Si vemos la salida, la función compareTo nos retornará un 1 si el monto es mayor, por lo que si queremos validar si es mayor o igual podemos usar la condición >=0:

Si queremos verificar si el monto1 es menor o igual al monto 2, lo podemos hacer así:

import java.math.BigDecimal;
public class Main  {

    public static void main(String[] args) {
        BigDecimal monto1 = new BigDecimal("1000.00");
        BigDecimal monto2 = new BigDecimal(10000);

      	if(monto1.compareTo(monto2)<=0){
            System.out.println("El monto1 es menor o igual al monto2");
        }
      
        if(monto1.compareTo(monto2)==-1){
            System.out.println("El monto1 es menor al monto2");
        }

    }
}

La salida será:

Cálculos con BigDecimal

Pero que pasa si queremos sumar, restar, multiplicar o dividir valores de tipo BigDecimal?bueno para eso debemos usar varias funciones que nos brinda BigDecimal:

Suma:

Usaremos la función add():

import java.math.BigDecimal;
public class Main  {

    public static void main(String[] args) {
        BigDecimal monto1 = new BigDecimal("1000.00");
        BigDecimal monto2 = new BigDecimal(10000);

        System.out.println("El resultado de la suma es: " + monto1.add(monto2));


    }
}

Salida:

Resta:

Usaremos la función subtract():

import java.math.BigDecimal;
public class Main  {

    public static void main(String[] args) {
        BigDecimal monto1 = new BigDecimal("10000.00");
        BigDecimal monto2 = new BigDecimal(3000);

        System.out.println("El resultado de la resta es: " + monto1.subtract(monto2));

    }
}

Salida:

División:

Usaremos la función divide():

import java.math.BigDecimal;
public class Main  {

    public static void main(String[] args) {
        BigDecimal monto1 = new BigDecimal("10000.00");
        BigDecimal monto2 = new BigDecimal(2);

        System.out.println("El resultado de la división es: " + monto1.divide(monto2));

    }
}

Salida:

Multiplicación:

Usaremos la función multiply():

import java.math.BigDecimal;
public class Main  {

    public static void main(String[] args) {
        BigDecimal monto1 = new BigDecimal("10000.00");
        BigDecimal monto2 = new BigDecimal(3);

        System.out.println("El resultado de la multiplicación es: " + monto1.multiply(monto2));

    }
}

Salida:

Conclusión:

BigDecimal nos ofrece una mayor exactitud para realizar cálculos matemáticos en nuestras aplicaciones y es 100% recomendado cuando se trabaja con dinero.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *