En este post voy a explicar cómo trabajar con dinero o moneda en Java a través de la clase BigDecimal. Veremos cómo operar (sumar, restar, dividir, multiplicar) y comparar valores con BigDecimal en Java.
El dinero o el tipo de dato monetario son una parte fundamental en muchos sistemas de información; pues las operaciones con el mismo deberían ser precisas, y los redondeos también.
BigDecimal es una manera exacta de representar números, y permite trabajar con mayor precisión que, por ejemplo, el tipo de dato double
.
Nota: para usar BigDecimal debes importarlo con:
import java.math.BigDecimal;
Con BigDecimal se trabaja normalmente como con cualquier otro tipo de dato, excepto por los operadores, ya que al no ser datos nativos, no podemos usar:
+
-
*
/
Ni los lógicos:
<
>
<=
>=
==
Pero existen otros métodos propios de las clases, y eso es justamente lo que explicaré.
Casi todos los métodos (excepto los constructores) operan con otro BigDecimal, es decir, al sumar, restar, etcétera, debemos pasar otro BigDecimal.
Para construir un BigDecimal podemos pasarle casi todo tipo de datos. Por ejemplo un String o un entero:
BigDecimal bd = new BigDecimal("5");
BigDecimal bd = new BigDecimal(5);
Los métodos que operan con BigDecimal van a devolver otro BigDecimal; no van a modificar internamente al valor. Lo veremos más a fondo en los ejemplos.
Para sumar, hay que llamar al método add
. Este método no modificará internamente a la variable, sino que regresará una nueva que ya tiene la suma.
En el siguiente ejemplo se explica mejor:
Si quieres sumarle a una variable debes definirla como el resultado de llamar a add
.
También puedes encadenar los métodos. Por ejemplo:
Para restar utiliza substract
, si quieres multiplicar utiliza multiply
y finalmente para dividir existe el método divide
.
Existen otros métodos para operar con BigDecimal que puedes ver aquí.
No podemos usar los operadores de comparación que conocemos, pero sí los métodos compareTo
y equals
para realizar comparaciones con BigDecimal.
El método compareTo
se llama a partir de un BigDecimal así:
int resultado = unBigDecimal.compareTo(otroBigDecimal);
Y devuelve -1, 0 o 1.
Esto se explica mejor con el siguiente código de ejemplo:
Podemos controlar la forma de redondear de BigDecimal, a través del método setScale
. Este método, al igual que los otros, devuelve al BigDecimal modificado, no lo modifica internamente.
El método setScale
recibe dos argumentos: la escala y la forma de redondeo.
La escala es un número entero y en palabras simples son los números que se ven a la derecha del punto.
La forma de redondeo es una constante de RoundingMode
(java.Math.RoundingMode
) y puede ser CEILING
, DOWN
, FLOOR
, HALF_DOWN
, HALF_EVEN
, HALF_UP
, UNNECESARY
y UP
.
Veamos un ejemplo en donde se ilustran algunos de estos casos:
La escala define los decimales a los que se redondea, y la forma define si es hacia arriba o hacia abajo.
Normalmente para redondear suavemente vas a usar las formas de HALF_*, y si tienes dudas puedes leer la documentación oficial.
Las operaciones, comparaciones y redondeos con BigDecimal se resumen en el siguiente código de ejemplo:
Puedes ejecutar el código en línea en este enlace.
La impresión de un PDF en cualquier impresora se puede automatizar con un bot de…
Hoy te enseñaré cómo enviar un mensaje a un usuario desde un bot de Telegram…
El día de hoy te enseñaré algo muy sencillo pero útil al programar con PHP:…
El plugin para imprimir en impresoras térmicas alcanza hoy su versión 3.4.0 agregando soporte para…
En ocasiones es necesario leer los pixeles y colores de una imagen con JavaScript del…
Siguiendo con los tutoriales de listas desplegables o select con JavaScript, vamos a ver cómo…
Esta web usa cookies.