# BigDecimal en Java: cómo representar números de coma flotante con precisión

Con la clase `BigDecimal` de Java, es posible manejar con precisión números de coma flotante complejos. Para lograrlo, primero debes crear estos números y, después, utilizar diversos métodos que permitan trabajar con ellos. La sintaxis de cada método suele mantener una estructura parecida, lo que facilita la utilización de la clase después de una breve formación incluso en el caso de los principiantes.

## ¿Qué es BigDecimal de Java?

En Java, `BigDecimal` es una clase que te permite representar y procesar con gran precisión **números de coma flotante complejos de tamaño (en teoría) ilimitado**. A través de diferentes métodos, puedes implementar con máxima precisión operaciones de redondeo, aritmética, conversión de formato, [hashing](https://www.ionos.es/digitalguide/paginas-web/desarrollo-web/hashing/) y comparaciones avanzadas.

Java `BigDecimal` consta de una **escala de entero de 32 bits** y un **valor entero no escalado** con precisión arbitraria. En este contexto, “escala” se refiere al número de dígitos después de la coma decimal, siempre y cuando estos sean mayores o iguales a cero. Si el valor es menor que cero, se multiplica por “10^(-escala)”. El tamaño máximo de la clase está limitado únicamente por la memoria del ordenador. Sin embargo, se trata de una limitación principalmente teórica, ya que es poco probable que un programa cree un número que supere la memoria disponible. Mientras que `BigDecimal` en Java está destinado exclusivamente para números de coma flotante, se recurre a `BigInteger` para números enteros.

## ¿Para qué se necesita la clase?

Aunque no siempre hay que recurrir a `BigDecimal` en Java, hay situaciones y ámbitos en los que esta clase resulta especialmente valiosa. Por ejemplo, se utilizan en cálculos donde incluso la posición decimal más alejada puede tener un gran impacto, como pueden ser las transacciones en [comercio electrónico](https://www.ionos.es/digitalguide/online-marketing/vender-en-internet/ecommerce/). También se utiliza en análisis estadísticos precisos. Además, hay gran número de programas, como los usados en el **control y navegación de aviones o cohetes**, que dependen de esta clase. Por su parte, en el **ámbito sanitario** también se recurre a Java `BigDecimal`.

## ¿Cómo se crea un objeto?

Si deseas utilizar `BigDecimal` en Java, primero debes **importar la clase en el programa de Java**. Una vez hecho, puedes declarar un **objeto de esta clase**, asignarle el valor deseado como argumento y pasarlo al constructor de Java correspondiente. Después, puedes usar los `BigDecimals` creados en Java. A continuación, te mostramos cómo importar la clase y declarar dos objetos de ejemplo:

```java
/ / Programa de Java para la clase BigDecimal
import java.math.BigDecimal;
public class ejemplo BigDecimal
{
	public static void main(String[] args)
	{
		/ / Crear dos nuevos BigDecimals 
		BigDecimal ejemplouno =
			new BigDecimal ("1275936001.744297361");
		BigDecimal ejemplodos =
			new BigDecimal ("4746691047.132719503");
	}
}
```

Ahora puedes usar estos objetos con los métodos de la clase que desees.

## Ejemplos de BigDecimal en Java

Después de haber creado los objetos, se utilizan distintos métodos para ejecutar operaciones y poder utilizar los objetos. Mediante sencillos ejemplos te presentamos cómo funcionan estos métodos y qué resultados puedes obtener. Con el [comando de Java](https://www.ionos.es/digitalguide/paginas-web/desarrollo-web/comandos-java/) `System.out.println()` se imprime una línea de texto en la salida estándar.

### Suma de dos BigDecimales

Para sumar dos BigDecimales en Java, se utiliza el método **add()**. Primero, indica los dos valores que deseas sumar. En nuestro ejemplo, el valor “EjemploUno” debe sumarse al valor “EjemploDos”. Esto presenta el siguiente aspecto:

```java
EjemploUno =
EjemploUno.add(EjemploDos);
System.out.println ("El resultado después de la suma es: " + EjemploUno);
```

### Restar números

Para restar dos valores entre sí, necesitas el método **subtract()**. En el siguiente ejemplo, se resta “EjemploDos” al “EjemploUno”. El código es el siguiente:

```java
EjemploUno =
EjemploUno.restar(EjemploDos);
System.out.println ("El resultado que buscas después de la resta es: " + EjemploUno);
```

### Multiplicar valores

El método usado para multiplicar dos BigDecimals en Java es muy similar a los de sumar o restar. Se denomina **multiply()** y utiliza como argumento al objeto “multiplicador”. Si quieres multiplicar “EjemploDos” por “EjemploUno”, el código que se debería usar es:

```java
EjemploUno =
EjemploUno.multiplicar(EjemploDos);
System.out.println ("El resultado después de la multiplicación es: " + EjemploUno);
```

### Dividir números

Para dividir dos BigDecimals en Java, recurre al método **divide()**. La sintaxis sigue siendo muy similar a la de otros métodos, y puede presentarse como sigue:

```java
EjemploUno =
EjemploUno.divide(EjemploDos);
System.out.println ("El resultado que buscas después de la división es: " + EjemploUno);
```

No obstante, solo se obtendrá un resultado si este es **exacto o se trata de un número entero**. Si no es así, aparece el siguiente mensaje de error: `java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result`, que describe un error en tiempo de ejecución. Para evitar este mensaje, se pueden aplicar distintas opciones de redondeo, que pueden compartirse con **java.math.RoundingMode**. Existen distintas constantes entre las que elegir:

<table>
  <thead>
    <tr>
      <th><strong>Constante</strong></th>
      <th><strong>Función</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>CEILING</td>
      <td>Redondeo positivo hacia el infinito.</td>
    </tr>
    <tr>
      <td>DOWN</td>
      <td>Redondeo hacia 0.</td>
    </tr>
    <tr>
      <td>FLOOR</td>
      <td>Redondeo hacia el infinito negativo.</td>
    </tr>
    <tr>
      <td>HALF\_DOWN</td>
      <td>Redondeo al siguiente número vecino y al opuesto de 0 si ambos están a la misma distancia.</td>
    </tr>
    <tr>
      <td>HALF\_EVEN</td>
      <td>Redondeo al siguiente número vecino y al hasta el siguiente número par si ambos están a la misma distancia.</td>
    </tr>
    <tr>
      <td>HALF\_UP</td>
      <td>Redondeo al siguiente número vecino en dirección a 0 siempre que ambos estén a la misma distancia.</td>
    </tr>
    <tr>
      <td>UNNECESSARY</td>
      <td>Omite el redondeo y solo realiza operaciones exactas. Solo se puede utilizar si la división es exacta.</td>
    </tr>
    <tr>
      <td>UP</td>
      <td>Redondeo a partir de 0.</td>
    </tr>
  </tbody>
</table>

## Resumen de los métodos más importantes

Después de haber aprendido cómo utilizar BigDecimals en Java, así como los distintos métodos asociados, te mostramos a continuación algunas de los métodos más importantes.

<table>
  <thead>
    <tr>
      <th><strong>Método</strong></th>
      <th><strong>Función</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>abs()</td>
      <td>BigDecimal con el valor absoluto de este BigDecimal.</td>
    </tr>
    <tr>
      <td>add()</td>
      <td>Devuelve un BigDecimal cuyo valor es la suma de (this + Sumando).</td>
    </tr>
    <tr>
      <td>divide()</td>
      <td>El valor de la salida se obtiene mediante (this / Divisor).</td>
    </tr>
    <tr>
      <td>max(BigDecimal val)</td>
      <td>Devuelve el valor máximo de este BigDecimal.</td>
    </tr>
    <tr>
      <td>min(BigDecimal val)</td>
      <td>Devuelve el valor mínimo de este BigDecimal.</td>
    </tr>
    <tr>
      <td>movePointLeft(int n)</td>
      <td>Devuelve un BigDecimal con el punto decimal desplazado hacia la izquierda por el valor “n”.</td>
    </tr>
    <tr>
      <td>movePointRight(int n)</td>
      <td>Devuelve un BigDecimal con el punto decimal desplazado hacia la derecha por el valor “n”.</td>
    </tr>
    <tr>
      <td>multiply(BigDecimal multiplicand, MathContext mc)</td>
      <td>Devuelve un valor que resulta de (this \* Multiplicador).</td>
    </tr>
  </tbody>
</table>

Consejo En la Digital Guide puedes encontrar más información sobre Java: por ejemplo, conoce los [operadores de Java](https://www.ionos.es/digitalguide/paginas-web/desarrollo-web/operadores-java/) y descubre las diferencias entre [Java y JavaScript](https://www.ionos.es/digitalguide/paginas-web/desarrollo-web/java-vs-javascript/) o entre [Java y Python](https://www.ionos.es/digitalguide/paginas-web/desarrollo-web/python-vs-java/).


This is a markdown version of: [https://www.ionos.es/digitalguide/paginas-web/desarrollo-web/bigdecimal-en-java/](https://www.ionos.es/digitalguide/paginas-web/desarrollo-web/bigdecimal-en-java/) for AI/LLM consumption.