# Java BigDecimal: So stellen Sie Fließkommazahlen exakt dar

Mit der Java-Klasse BigDecimal ist es möglich, komplexe Fließkommazahlen präzise zu verarbeiten. Diese müssen dafür zunächst erstellt werden und lassen sich dann durch verschiedene Methoden nutzen. Die Syntax ist dabei immer ähnlich aufgebaut, sodass die Nutzung der Klasse nach kurzer Einarbeitung auf für Einsteigerinnen und Einsteiger möglich ist.

## Was ist Java BigDecimal?

Bei Java BigDecimal handelt es sich um eine Klasse, die es Ihnen erlaubt, **komplexe Gleitkommazahlen von theoretisch beliebiger Größe** sehr exakt darzustellen und zu verarbeiten. Durch unterschiedliche Methoden, die wir Ihnen in diesem Artikel vorstellen, können Sie mit dieser Klasse Operationen im Bereich der Abrundung, Arithmetik, Formatkonvertierung, [Hashing](https://www.ionos.de/digitalguide/websites/web-entwicklung/hashing/) und gehobenen Vergleichen mit allerhöchster Präzision durchführen.

Java BigDecimal besteht aus einer **32-Bit-Integer-Skala** und einem **unskalierten (engl. „unscale“) Integer-Wert** mit beliebiger Genauigkeit. „Scale“ meint in diesem Fall die Anzahl der Ziffern hinter dem Dezimalpunkt, sofern dieser größer als oder gleich Null sind. Ist der Wert hingegen kleiner als Null, so wird er mit „10^(-scale)“ multipliziert. Die mögliche Größe der Klasse wird lediglich vom Speicher des Computers limitiert. Dies ist allerdings eher eine theoretische Überlegung, da es unwahrscheinlich ist, dass ein Programm eine Zahl erstellt, die den verfügbaren Speicher übersteigt. Während BigDecimal in Java ausschließlich für Gleitkommazahlen gedacht ist, werden ganze Zahlen mit der Klasse BigInteger verarbeitet.

## Wofür wird die Klasse benötigt?

Durch seine Genauigkeit ist Java BigDecimal zwar nicht für jeden Anwendungszweck notwendig, es gibt allerdings Situationen und Einsatzfelder, in denen die Klasse sehr wertvolle Dienste leistet. Berechnungen, bei denen auch die kleinste Dezimalstelle eine große Auswirkung haben kann, werden zum Beispiel im Bereich [E-Commerce](https://www.ionos.de/digitalguide/online-marketing/verkaufen-im-internet/e-commerce/) für Transaktionen angestellt. Auch bei genauen Statik-Analysen kommt die Klasse zum Einsatz. Dazu setzen zahlreiche Programme, die zum Beispiel bei der **Steuerung und Navigation von Flugzeugen oder Raketen** zum Einsatz kommen, auf die Klasse und auch im **medizinischen Segment** greift man auf Java BigDecimal zurück. In anderen Feldern gibt die genaue Berechnung zumindest die größtmögliche Sicherheit.

## Wie wird ein Objekt erstellt?

Wenn Sie BigDecimal in Java verwenden möchten, müssen Sie zunächst die **Klasse in das Java-Programm importieren**. Ist dies geschafft, können Sie im Anschluss ein **Objekt dieser Klasse deklarieren**, dann den gewünschten Wert als Argument anlegen und dieses an den passenden Java-Konstruktor übergeben. Wenn Sie diesen Vorgang durchgeführt haben, können Sie die angelegten BigDecimals in Java verwenden. Dafür stehen Ihnen innerhalb der Klasse verschiedene Methoden zur Verfügung, deren Verwendung wir Ihnen in den nächsten Abschnitten näher erklären. So importieren Sie zunächst die Klasse und deklarieren zwei beispielhafte Objekte:

```java
/ / Ihr Java-Programm für die BigDecimal-Klasse
import java.math.BigDecimal;
public class BigDecimalBeispiel
{
	public static void main(String[] args)
	{
		/ / Zwei neue BigDecimals erstellen
		BigDecimal BeispielEins =
			new BigDecimal ("1275936001.744297361");
		BigDecimals BeispielZwei =
			new BigDecimal ("4746691047.132719503");
	}
}
```

Nun können Sie diese Objekte mit den entsprechenden Methoden der Klasse verwenden.

## Beispiele für Java BigDecimal

Nachdem Sie die Objekte angelegt haben, nutzen Sie unterschiedliche Methoden, um Operationen durchzuführen und die Objekte so zu verwenden. Wir zeigen Ihnen anhand einiger einfacher Beispiele, wie das funktioniert und welche Ergebnisse Sie so erzielen können. Die Ausgabe wird über den [Java-Befehl](https://www.ionos.de/digitalguide/websites/web-entwicklung/java-befehle/) `System.out.println()` initiiert.

### Zwei BigDecimals addieren

Wenn Sie zwei BigDecimals in Java addieren möchten, ist dies mit der Methode **add()** möglich. Dafür hinterlegen Sie die zwei Werte, von denen Sie die Summe errechnen möchten. In unserem Beispiel soll der Wert „BeispielEins“ zu dem Wert „BeispielZwei“ addiert werden. Das sieht folgendermaßen aus:

```java
BeispielEins =
BeispielEins.add(BeispielZwei);
System.out.println ("Das gesuchte Ergebnis nach der Addition lautet: " + BeispielEins);
```

### Zahlen subtrahieren

Um zwei Werte voneinander abzuziehen, benötigen Sie die Methode **subtract()**. In unserem nächsten Beispiel subtrahieren wir „BeispielZwei“ von „BeispielEins“. Der Code dazu sieht so aus:

```java
BeispielEins =
BeispielEins.subtract(BeispielZwei);
System.out.println ("Das gesuchte Ergebnis nach der Subtraktion lautet: " + BeispielEins);
```

### Werte multiplizieren

Die Methode, mit der Sie zwei BigDecimals in Java multiplizieren, funktioniert sehr ähnlich. Sie lautet **multiply()** und nutzt das Objekt „multiplier“ als Argument. Wenn Sie „BeispielZwei“ mit „BeispielEins“ multiplizieren möchten, sieht der dazu passende Code so aus:

```java
BeispielEins =
BeispielEins.multiply(BeispielZwei);
System.out.println ("Das gesuchte Ergebnis nach der Multiplikation lautet: " + BeispielEins);
```

### Zahlen dividieren

Wenn Sie zwei BigDecimals in Java dividieren möchten, ist die Methode **divide()** die richtige Wahl. Grundsätzlich folgt diese ebenfalls der bekannten Syntax und sieht aus wie folgt:

```java
BeispielEins =
BeispielEins.divide(BeispielZwei);
System.out.println ("Das gesuchte Ergebnis nach der Division lautet: " + BeispielEins);
```

Dies funktioniert allerdings nur, wenn das Ergebnis **exakt oder eine Ganzzahl** ist. Ist dies nicht der Fall, wird eine folgende Fehlermeldung ausgegeben: `java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.`. Diese beschreibt einen Laufzeitfehler. Um diesen zu vermeiden, gibt es für die Methode divide() verschiedene Rundungsoptionen, die über **java.math.RoundingMode** übermittelt werden können. Dabei haben Sie die Wahl aus den folgenden Konstanten:

<table>
  <thead>
    <tr>
      <th><strong>Konstante</strong></th>
      <th><strong>Funktion</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>CEILING</td>
      <td>Rundet nach positiv unendlich.</td>
    </tr>
    <tr>
      <td>DOWN</td>
      <td>Rundet nach 0.</td>
    </tr>
    <tr>
      <td>FLOOR</td>
      <td>Rundet nach negativ unendlich.</td>
    </tr>
    <tr>
      <td>HALF\_DOWN</td>
      <td>Rundet zur nächsten benachbarten Zahl und endgegengesetzt von der 0, sofern beide gleich weit entfernt sind.</td>
    </tr>
    <tr>
      <td>HALF\_EVEN</td>
      <td>Rundet zur nächsten benachbarten Zahl und zur nächsten geraden Zahl, sofern beide gleich weit entfernt sind.</td>
    </tr>
    <tr>
      <td>HALF\_UP</td>
      <td>Rundet zur nächsten benachbarten Zahl und in Richtung 0, sofern beide gleich weit entfernt sind.</td>
    </tr>
    <tr>
      <td>UNNECESSARY</td>
      <td>Verzichtet auf eine Rundung und führt ausschließlich exakte Operationen durch. Diese Konstante kann nur verwendet werden, wenn die Division exakt ist.</td>
    </tr>
    <tr>
      <td>UP</td>
      <td>Rundet weg von der 0.</td>
    </tr>
  </tbody>
</table>

## Ein Überblick über die wichtigsten Methoden

Nachdem Sie nun gelernt haben, wie Sie BigDecimals in Java verwenden und Methoden dafür nutzen, stellen wir Ihnen abschließend einige der wichtigsten Methoden in der Übersicht vor.

<table>
  <thead>
    <tr>
      <th><strong>Methode</strong></th>
      <th><strong>Funktion</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>abs()</td>
      <td>BigDecimal mit dem absoluten Wert dieses BigDecimals</td>
    </tr>
    <tr>
      <td>add()</td>
      <td>Gibt einen BigDecimal aus, dessen Wert sich zusammensetzt aus (this + Addend).</td>
    </tr>
    <tr>
      <td>divide()</td>
      <td>Der Wert der Ausgabe ergibt sich durch (this / Divisor).</td>
    </tr>
    <tr>
      <td>max(BigDecimal val)</td>
      <td>Gibt das Maximum dieses BigDecimals aus.</td>
    </tr>
    <tr>
      <td>min(BigDecimal val)</td>
      <td>Gibt das Minimum dieses BigDecimals aus.</td>
    </tr>
    <tr>
      <td>movePointLeft(int n)</td>
      <td>Gibt einen BigDecimal aus, bei dem der Dezimalpunkt um den Wert „n“ nach links verschoben wurde.</td>
    </tr>
    <tr>
      <td>movePointRight(int n)</td>
      <td>Gibt einen BigDecimal aus, bei dem der Dezimalpunkt um den Wert „n“ nach rechts verschoben wurde.</td>
    </tr>
    <tr>
      <td>multiply(BigDecimal multiplicand, MathContext mc)</td>
      <td>Gibt einen Wert aus, der sich aus (this \* Multiplikant) ergibt.</td>
    </tr>
  </tbody>
</table>

Tipp In unserem Digital Guide erfahren Sie noch viel mehr über die bekannte und beliebte Programmiersprache: Lernen Sie zum Beispiel die [Java-Operatoren](https://www.ionos.de/digitalguide/websites/web-entwicklung/java-operator/) kennen und erfahren Sie alles Wichtige über die Unterschiede zwischen [Java und JavaScript](https://www.ionos.de/digitalguide/websites/web-entwicklung/java-vs-javascript/) oder [Java und Python](https://www.ionos.de/digitalguide/websites/web-entwicklung/python-vs-java/).


This is a markdown version of: [https://www.ionos.de/digitalguide/websites/web-entwicklung/java-bigdecimal/](https://www.ionos.de/digitalguide/websites/web-entwicklung/java-bigdecimal/) for AI/LLM consumption.