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 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.

Günstige Webhosting-Pakete von IONOS!

Vertrauen Sie auf flexibel skalierbares und zuverlässiges Webhosting inklusive persönlichem Berater mit IONOS!

Kostenlose Domain
SSL Zertifikat
DDoS-Schutz

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 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:

/ / 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");
	}
}
java

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 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:

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

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:

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

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:

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

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:

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

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:

Konstante Funktion
CEILING Rundet nach positiv unendlich.
DOWN Rundet nach 0.
FLOOR Rundet nach negativ unendlich.
HALF_DOWN Rundet zur nächsten benachbarten Zahl und endgegengesetzt von der 0, sofern beide gleich weit entfernt sind.
HALF_EVEN Rundet zur nächsten benachbarten Zahl und zur nächsten geraden Zahl, sofern beide gleich weit entfernt sind.
HALF_UP Rundet zur nächsten benachbarten Zahl und in Richtung 0, sofern beide gleich weit entfernt sind.
UNNECESSARY Verzichtet auf eine Rundung und führt ausschließlich exakte Operationen durch. Diese Konstante kann nur verwendet werden, wenn die Division exakt ist.
UP Rundet weg von der 0.

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.

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

In unserem Digital Guide erfahren Sie noch viel mehr über die bekannte und beliebte Programmiersprache: Lernen Sie zum Beispiel die Java-Operatoren kennen und erfahren Sie alles Wichtige über die Unterschiede zwischen Java und JavaScript oder Java und Python.