Java double erklärt: Bereich, Präzision, häufige Fallstricke und BigDecimal-Alternativen

目次

1. Was ist der double‑Typ von Java?

Der double‑Typ von Java ist ein grundlegender Datentyp für die Arbeit mit Dezimalwerten. Im Gegensatz zu int oder long, die ganze Zahlen darstellen, wird double verwendet, um Zahlen mit einem Dezimalpunkt wie „1,5“, „3,14“ oder „0,01“ zu repräsentieren. Er ist einer der am häufigsten genutzten Typen bei numerischen Berechnungen in Java.

Da Anfänger hier häufig frühzeitig stolpern, ist es wichtig, zuerst zu verstehen, welche Eigenschaften double hat.

1.1 double ist „Double‑Precision Floating‑Point“

double ist eine doppelt‑genaue Gleitkommazahl, die Werte mit 64 Bit (8 Byte) darstellt.
Wie der Begriff „Gleitkomma“ suggeriert, behandelt double intern numerische Werte als Annäherungen.

Infolgedessen hat er die folgenden Merkmale:

  • Er kann einen extrem breiten Wertebereich abdecken
  • Er kann Berechnungen mit Brüchen durchführen
  • Er kann jedoch nicht jeden Dezimalwert exakt darstellen

Die Tatsache, dass er „nicht jeden Dezimalwert exakt darstellen kann“, wird später ausführlich erklärt, aber wenn man im Hinterkopf behält, dass double nicht万能 ist, wird der Rest viel leichter verständlich.

1.2 Ein praktisches Bild dessen, was double darstellen kann

Der Wertebereich, den ein double darstellen kann, ist enorm. Grob gesagt kann er Folgendes verarbeiten:

  • Sehr kleine Zahlen (z. B. 0,0000000001)
  • Sehr große Zahlen (in der Größenordnung von 10^300)
  • Typische alltägliche Dezimalzahlen

Zum Beispiel können alle der folgenden Werte in einem double gespeichert werden:

double a = 3.14;
double b = 0.1;
double c = 123456789.987;

Für Berechnungen wie alltägliche numerische Verarbeitung, physikalische Größen, statistische Daten und Koordinatenberechnungen – bei denen „ungefähr korrekt ist gut genug“ – wird double häufig als Standardwahl verwendet.

1.3 In Java sind Dezimal‑Literals standardmäßig double

In Java wird ein numerisches Literal mit Dezimalpunkt standardmäßig als double behandelt, sofern nicht anders angegeben.

double x = 1.23;   // OK
float  y = 1.23;   // コンパイルエラー

Im obigen Beispiel schlägt float y = 1.23; fehl, weil 1.23 als double interpretiert wird.
Wenn es als float behandelt werden soll, muss man es explizit so angeben:

float y = 1.23f;

Dieses Verhalten zeigt, dass in Java double die Vorgabe für Dezimalberechnungen ist.

1.4 Häufige Anwendungsfälle für double

double wird typischerweise in folgenden Situationen verwendet:

  • Wenn das Ergebnis einer Division als Dezimalzahl benötigt wird
  • Berechnungen wie Durchschnitte und Verhältnisse
  • Grafik‑Rendering und Koordinatenberechnungen
  • Wissenschaftliche Berechnungen und statistische Auswertungen

Auf der anderen Seite ist er nicht geeignet für Geldberechnungen oder strenge Dezimalverarbeitung.
Dies wird später im Detail erklärt, wenn es um die Wahl zwischen double und BigDecimal geht.

1.5 Wichtige Punkte, die man zuerst merken sollte

Zusammengefasst, was Sie bisher gelernt haben, in einer anfängerfreundlichen Form:

  • double ist der Basistyp für Dezimalzahlen
  • Intern werden Berechnungen mit approximativen Werten durchgeführt
  • In Java sind Dezimal‑Literals standardmäßig double
  • Sie müssen vorsichtig sein, wenn Präzision wichtig ist

2. double‑Bereich und Präzision (Ein Leitfaden zu signifikanten Stellen)

Beim Erlernen des double‑Typs ist ein unvermeidbares Thema die Frage, „wie genau kann er Zahlen darstellen?“
In diesem Abschnitt lernen Sie den Zahlenbereich, die Präzision und das Konzept signifikanter Stellen für double auf anfängerfreundliche Weise kennen.

2.1 Der numerische Bereich, den double darstellen kann

Da double 64 Bit zur Darstellung von Werten verwendet, kann er einen extrem breiten Zahlenbereich abdecken.

Konzeptionell sieht der Bereich etwa so aus:

  • Sehr kleine Zahlen: z. B. bis etwa 4,9 × 10^-324
  • Sehr große Zahlen: z. B. bis etwa 1,8 × 10^308

In everyday programming, you rarely need to think about these limits.
For most practical purposes, you can consider it as handling an almost “near‑infinite” range.

2.2 Signifikante Stellen sind ungefähr 15 bis 17 Stellen

The key concept for understanding double precision is significant digits.

A double is often said to be able to store about 15 to 17 digits accurately.

For example, consider the following values:

double a = 123456789012345.0;
double b = 1234567890123456.0;
  • a (15 digits) can be represented accurately
  • b (16+ digits) may have lower digits rounded off

In other words, as the number of digits grows, fine‑grained accuracy is gradually lost.

2.3 “High Precision” Does Not Mean “Exact Decimals”

Here is a common beginner misunderstanding.

double has high precision
→ so it can handle decimals exactly

This is not always correct.

double is indeed a high‑precision type, but that means:
“it can be accurate as an approximation up to a certain number of digits”
rather than “every decimal value is exact.”

For example, consider this calculation:

double x = 0.1 + 0.2;
System.out.println(x);

Many people expect 0.3, but in reality you might see something like:

0.30000000000000004

This is not a bug. It is how double works.
The reason is that 0.1 and 0.2 cannot be represented exactly in binary.

2.4 Why Significant Digits Matter

If you don’t understand significant digits, you can run into issues like:

  • Results being slightly off
  • Comparisons with == not matching
  • Errors accumulating in sums or averages

All of these come from the fact that double is a type that handles approximate values.

On the flip side, in areas where “perfect equality” matters less than “realistic precision,” such as:

  • Graph rendering
  • Physical simulations
  • Statistical processing

double is an excellent choice.

2.5 Correct Understanding Based on Range and Precision

To summarize:

  • double can represent an extremely wide range of values
  • It has about 15–17 significant digits
  • Decimals are handled as approximations
  • Be careful when strict precision is required

3. Differences Between double and float (Which Should You Use?)

When working with decimals in Java, double and float are almost always compared.
Both can represent fractional values, but there are major differences in precision, use cases, and practicality.

In this section, we focus on clear decision criteria so beginners don’t get stuck.

3.1 The Basic Differences Between float and double

Let’s keep the comparison simple:

TypeBitsTypical PrecisionMain Use
float32-bitAbout 6–7 digitsLightweight / lower precision
double64-bitAbout 15–17 digitsStandard / higher precision

As you can see, double provides dramatically higher precision.

3.2 Why double Is the Standard in Java

In Java, decimal literals (like 1.23) are treated as double by default.
This is mainly because:

  • On modern CPUs, the performance cost of double is usually negligible
  • Bugs caused by insufficient precision tend to be more serious
  • double is better for readability and safety in typical code

Therefore, in Java, the common approach is: use double unless you have a strong reason not to.

3.3 When You Should Use float

So is float useless?
No—it can be effective depending on the context.

Typical situations where float is chosen include:

  • When you need to minimize memory usage extremely
  • When handling massive numeric arrays (e.g., image processing)
  • When prioritizing speed over precision in games or 3D calculations

However, for business applications or web applications,
there is rarely a strong reason to use float.

3.4 A Simple Rule for Beginners

If you’re unsure which one to use, remember this rule:

  • If in doubt, use double
  • Use float only when memory/performance constraints are strict

Besonders beim Lernen ist es in der Regel effizienter, float‑spezifische Präzisionsprobleme zu vermeiden und das Verständnis mit double aufzubauen.

3.5 Warum das Verständnis dieses Unterschieds wichtig ist

Das Wissen um den Unterschied hilft in Situationen wie:

  • Das Verständnis der Absicht beim Lesen von fremdem Code
  • Vermeidung unnötigen Präzisionsverlusts
  • Vermeidung von numerischen Berechnungsfehlern, bevor sie auftreten

4. Grundlegende Verwendung von double (Deklaration, Berechnung, Ausgabe)

Nun bestätigen wir die grundlegende Verwendung von double mit tatsächlichem Code.
Wenn Sie den Ablauf „deklarieren → berechnen → ausgeben“ verstehen, haben Sie die Grundlagen abgedeckt.

4.1 Deklarieren und Zuweisen eines double

Sie deklarieren ein double genauso wie andere primitive Typen:

double x = 1.5;
double y = 2.0;

Beim Zuweisen von Dezimalwerten benötigen Sie keinen speziellen Suffix.
Sie können auch einen ganzzahligen Wert zuweisen; er wird automatisch in double konvertiert.

double a = 10;   // Treated as 10.0

4.2 Die vier grundlegenden arithmetischen Operationen

Mit double können Sie direkt Addition, Subtraktion, Multiplikation und Division verwenden:

double a = 5.0;
double b = 2.0;

double sum = a + b;      // addition
double diff = a - b;     // subtraction
double product = a * b;  // multiplication
double quotient = a / b; // division

Alle Ergebnisse sind ebenfalls double, sodass Sie natürlich dezimale Ergebnisse verarbeiten können.

4.3 Eine wichtige Vorsicht bei der Division

Der entscheidende Punkt ist, dass Division nur dann zu einer Dezimalberechnung wird, wenn mindestens eine Seite ein double ist.

double result1 = 1 / 2;    // result is 0.0
double result2 = 1 / 2.0;  // result is 0.5

1 / 2 verwendet auf beiden Seiten Ganzzahlen, daher wird zuerst Ganzzahldivision durchgeführt.
Um dies zu vermeiden, tun Sie eines der Folgenden:

  • Machen Sie einen Operanden zu einem double
  • Verwenden Sie einen expliziten Cast
    double result = (double) 1 / 2;
    

4.4 Berechnungsergebnisse ausgeben

Sie können einen double‑Wert direkt mit System.out.println() ausgeben:

double value = 3.14159;
System.out.println(value);

Allerdings kann das direkte Ausgeben mehr Stellen zeigen, als Sie möchten.

4.5 Ausgabe mit einer festen Anzahl von Stellen

Wenn Sie eine sauberere Ausgabe wünschen, ist printf praktisch:

double value = 3.14159;
System.out.printf("%.2f%n", value);

Dies gibt den Wert mit zwei Nachkommastellen aus.

  • %.2f : 2 Stellen nach dem Dezimalpunkt
  • %n : Zeilenumbruch

Für benutzerorientierte Anzeigen wird empfohlen, immer die Anzahl der angezeigten Stellen zu kontrollieren.

4.6 Zusammenfassung der Grundlagen von double‑Berechnungen

Wichtige Erkenntnisse aus diesem Abschnitt:

  • double unterstützt dezimale Berechnungen von Natur aus
  • Seien Sie vorsichtig bei Divisionen zwischen Ganzzahlen
  • Kontrollieren Sie die angezeigten Stellen beim Ausgeben von Ergebnissen

5. Häufiges Problem #1: Warum Präzisionsfehler auftreten

Eine der ersten verwirrenden Erfahrungen bei der Verwendung von double ist:
„Das Ergebnis stimmt nicht mit meiner Erwartung überein.“

Dies ist kein Java‑Fehler. Es ist eine grundlegende Eigenschaft des double‑Typs.

5.1 Ein klassisches Beispiel für einen Präzisionsfehler

Betrachten wir ein bekanntes Beispiel:

double x = 0.1 + 0.2;
System.out.println(x);

Viele erwarten 0.3, aber Sie sehen möglicherweise tatsächlich:

0.30000000000000004

Wenn Sie das sehen, könnten Sie denken „etwas ist falsch“ oder „ist das ein Bug?“
Aber das ist das korrekte Ergebnis für double.

5.2 Warum dieser Fehler auftritt

Der Grund ist, dass double Zahlen mit binär darstellt.
Menschen verwenden das Dezimalsystem, aber Computer nutzen intern das Binärsystem.
Das Kernproblem ist:

  • Viele dezimale Zahlen können nicht mit einer endlichen Anzahl binärer Stellen dargestellt werden
  • Daher speichert das System die nächste Annäherung

0.1 und 0.2 enden nicht im Binärsystem, daher werden sie als Werte gespeichert, die „sehr nahe“ an den genauen Dezimalwerten liegen, aber nicht identisch sind.
Das Addieren dieser Annäherungen liefert ein Ergebnis wie 0.30000000000000004.

5.3 Immer davon ausgehen, dass Fehler auftreten können

Die wichtigste Einstellung ist:

Mit double sind Präzisionsfehler unvermeidlich

Fehler werden besonders deutlich in Fällen wie:

  • Wiederholtes Addieren/Subtrahieren vieler Male
  • Berechnungen, die Division beinhalten
  • Wenn Sie strenge Korrektheit bis zu vielen Dezimalstellen benötigen

Kurz gesagt, double ist nicht dafür ausgelegt, „perfekt exakte Dezimalzahlen“ zu liefern.

5.4 Wenn Fehler normalerweise keine Rolle spielen

Andererseits gibt es viele Fälle, in denen Präzisionsfehler selten ein praktisches Problem darstellen.

Zum Beispiel:

  • Grafiken und Animationen
  • Sensordaten und statistische Daten
  • Wissenschaftliches Rechnen
  • Spiele und Simulationen

In diesen Bereichen ist wichtiger als exakte Gleichheit die Fähigkeit, mit realistischer Präzision zu rechnen.

Genau hier glänzt double.

5.5 Wie Sie mit Präzisionsfehlern umgehen sollten

Der Versuch, Fehler vollständig zu eliminieren, führt oft dazu, dass Ihr Design bricht.
Stattdessen sollten Sie diese Prinzipien befolgen:

  • Akzeptieren Sie, dass Fehler „passieren können“
  • Verwenden Sie geeignete Vergleichs-/Beurteilungsmethoden
  • Verwenden Sie unterschiedliche Ansätze, wenn Fehler nicht akzeptabel sind

6. Häufige Falle #2: Die Verwendung von „==“ zum Vergleich von double-Werten ist gefährlich

Nachdem Sie Präzisionsfehler verstanden haben, ist das nächste Problem, dem fast jeder begegnet:
„Warum funktioniert der Vergleich nicht wie erwartet?“

Ein sehr häufiger Anfängerfehler ist das Vergleichen von double-Werten mit ==.

6.1 Was passiert, wenn Sie „==“ verwenden

Betrachten Sie den folgenden Code:

double a = 0.1 + 0.2;
double b = 0.3;

System.out.println(a == b);

Intuitiv würden Sie true erwarten, aber das Ergebnis kann false sein.
Dies wird durch den Präzisionsfehler verursacht, der zuvor erklärt wurde.

  • a ist nahe bei 0.30000000000000004
  • b ist eine andere Annäherung, die 0.3 darstellt

Da diese Werte auf Bit-Ebene nicht identisch sind, meldet == sie als unterschiedlich.

6.2 Die goldene Regel für den Vergleich von double-Werten

Es gibt eine grundlegende Regel, die Sie sich immer merken sollten:

Vergleichen Sie double-Werte niemals auf exakte Gleichheit

Der ==-Operator prüft, ob die internen Darstellungen exakt gleich sind, nicht ob die Werte „nahe genug“ sind.

Damit ist er für Gleitkommazahlen ungeeignet.

6.3 Vergleich mit einem Epsilon (Toleranz)

Beim Vergleich von double-Werten sollten Sie einen Schwellenwert festlegen für
„wie nahe ist nahe genug.“

Dieser Schwellenwert wird Epsilon (Toleranz) genannt.

double a = 0.1 + 0.2;
double b = 0.3;

double epsilon = 1e-9;

if (Math.abs(a - b) < epsilon) {
    System.out.println("Approximately equal");
}

Dieser Ansatz prüft, ob:

  • Der absolute Unterschied ist hinreichend klein
  • Die Werte für praktische Zwecke als gleich betrachtet werden können

6.4 Wie wählt man ein Epsilon aus?

Eine häufige Anfängerfrage lautet:
„Wie groß sollte das Epsilon sein?“

Die Idee ist einfach. Basieren Sie darauf:

  • Der Größenordnung der Werte, die Sie verarbeiten
  • Der Menge an Fehler, die Sie tolerieren können

Typische Faustregeln umfassen:

  • 1e-9 : sicher für viele allgemeine Berechnungen
  • 1e-12 : sehr streng
  • 1e-6 : geeignet für Anzeige oder grobe Schätzungen

Es gibt keinen einzigen korrekten Wert.
Wählen Sie basierend auf Ihrem Anwendungsfall.

6.5 Wie sich das von BigDecimal unterscheidet

Ein wenig vorausblickend, beachten Sie den Unterschied in der Philosophie:

  • double : Arbeiten, während kleine Fehler toleriert werden
  • BigDecimal : Design, das keinen Fehler zulässt

Wenn der Vergleich „zu kompliziert“ erscheint, kann das ein Hinweis darauf sein, dass double nicht die richtige Wahl für diese Aufgabe ist.

6.6 Zusammenfassung der Vergleichsregeln

  • Verwenden Sie nicht ==
  • Vergleichen Sie mit absoluten Differenzen
  • Wählen Sie das Epsilon basierend auf dem Kontext
  • Verwenden Sie andere Typen, wenn strenge Genauigkeit erforderlich ist

7. Häufige Falle #3: Ganzzahlige Division ergibt Null

Selbst bei Verwendung von double können Ergebnisse unerwartet 0 werden.
Dies ist einer der häufigsten Anfängerfehler.

Die Ursache ist einfach: die Berechnung wird mit Ganzzahlen durchgeführt.

7.1 Warum Ganzzahlige Division passiert

In Java bestimmt der Typ der Operanden, wie eine Berechnung durchgeführt wird.
Betrachten Sie diesen Code:

double result = 1 / 2;
System.out.println(result);

Die Ausgabe ist:

0.0

Da sowohl 1 als auch 2 int sind, führt Java zuerst eine Ganzzahldivision durch, die 0 ergibt, welche dann in double konvertiert wird.

7.2 Wie man Dezimaldivision korrekt durchführt

Ganzzahldivision zu vermeiden ist einfach.
Machen Sie mindestens einen Operanden zu einem double.

double result1 = 1 / 2.0;
double result2 = 1.0 / 2;
double result3 = (double) 1 / 2;

All dies liefert:

0.5

7.3 Ein häufiger Fehler in der Praxis

Diese Art von Code wird häufig in realen Anwendungen gesehen:

int total = 5;
int count = 2;

double average = total / count;

Obwohl es korrekt aussieht, ist das Ergebnis 2.0.
Der richtige Weg, den Durchschnitt zu berechnen, ist:

double average = (double) total / count;

7.4 Regeln, die Anfänger sich merken sollten

  • Achten Sie immer auf die Typen bei Divisionen
  • Integer ÷ Integer liefert einen Integer
  • Das Ergebnis als double zu erhalten, reicht nicht aus

7.5 Zusammenfassung der Ganzzahldivisionsfalle

  • Die Ursache liegt in den Operanden‑Typen und der Auswertungsreihenfolge
  • Verwenden Sie von Anfang an double in der Berechnung
  • Seien Sie besonders vorsichtig bei Durchschnitten und Verhältnissen

8. Konvertieren zwischen String und double (am häufigsten in der Praxis)

In realen Anwendungen kodieren Sie selten double‑Werte fest.
Viel häufiger müssen Sie Strings (String) in Zahlen umwandeln.

Typische Beispiele sind:

  • Formulareingaben
  • CSV‑ oder JSON‑Dateien
  • Konfigurationsdateien
  • API‑Antworten

Dieser Abschnitt erklärt sichere Methoden, um zwischen String und double zu konvertieren.

8.1 Einen String in double konvertieren

8.1.1 Double.parseDouble()

Die gebräuchlichste und grundlegendste Methode:

String text = "3.14";
double value = Double.parseDouble(text);

Wenn der String eine gültige Zahl ist, gelingt die Konvertierung.

8.1.2 Umgang mit ungültigen Strings

Ist der String nicht numerisch, wird eine Exception ausgelöst:

String text = "abc";
double value = Double.parseDouble(text); // throws exception

Dies wirft eine NumberFormatException.
In der Praxis sollten Sie immer try-catch verwenden:

try {
    double value = Double.parseDouble(text);
} catch (NumberFormatException e) {
    // error handling
}

8.2 Unterschied zwischen Double.valueOf()

Double.valueOf() ist eine weitere Methode, um einen String in einen numerischen Wert zu konvertieren.

Double value = Double.valueOf("3.14");

Der Unterschied zwischen den beiden Methoden ist:

  • parseDouble → gibt ein primitives double zurück
  • valueOf → gibt ein Double‑Wrapper‑Objekt zurück

Für normale numerische Berechnungen reicht parseDouble aus.
Bei der Arbeit mit Sammlungen wie List<Double> wird valueOf häufig verwendet.

8.3 Einen double in String konvertieren

Auch das Konvertieren eines double in einen String ist sehr verbreitet.

double value = 3.14;
String text = String.valueOf(value);

Eine weitere weit verbreitete Option ist:

String text = Double.toString(value);

Beide Ansätze sind sicher. Wählen Sie je nach Stil oder Projektkonvention.

8.4 Immer formatierte Strings für die Anzeige verwenden

Wenn Zahlen dem Benutzer angezeigt werden,
verwenden Sie immer formatierte Ausgaben.

double value = 3.14159;
String text = String.format("%.2f", value);

Damit wird der Wert auf zwei Dezimalstellen formatiert.

8.5 Wichtige Punkte zur String‑Konvertierung

  • Erwarten Sie immer ungültige Eingaben und behandeln Sie Exceptions
  • Trennen Sie interne Berechnungen von der Anzeigeformatierung
  • Kontrollieren Sie stets die Dezimalstellen bei der Anzeige von Werten

Der nächste Abschnitt erklärt spezielle double‑Werte: NaN und Infinity.
Ohne ihr Verständnis wird das Debuggen von numerischen Problemen sehr schwierig.

9. Sonderwerte in der Double‑Klasse (NaN / Infinity)

Der double‑Typ enthält Sonderwerte, die keine gewöhnlichen Zahlen sind.
Ihr Verständnis ist entscheidend für robuste Programme.

9.1 Was ist NaN (Not a Number)?

NaN stellt ein undefiniertes numerisches Ergebnis dar.
Es tritt in Berechnungen wie folgt auf:

double value = 0.0 / 0.0;
System.out.println(value);

Die Ausgabe ist:

NaN

9.2 Was ist Unendlichkeit?

Wenn das Ergebnis einer Division überläuft, erzeugt Java Infinity.

double value = 1.0 / 0.0;
System.out.println(value);

Die Ausgabe ist:

Infinity

Ist der Zähler negativ, ist das Ergebnis -Infinity.

9.3 Wie man NaN und Infinity prüft

Diese Werte können nicht zuverlässig mit == geprüft werden.
Verwenden Sie immer die dafür vorgesehenen Methoden:

double value = 0.0 / 0.0;

if (Double.isNaN(value)) {
    System.out.println("Value is NaN");
}

if (Double.isInfinite(value)) {
    System.out.println("Value is infinite");
}

9.4 Warum frühe Erkennung wichtig ist

Wenn NaN oder Infinity sich durch Berechnungen ausbreiten, kann das Folgendes verursachen:

  • Alle nachfolgenden Ergebnisse werden zu NaN
  • Ungültige Werte werden in der Benutzeroberfläche angezeigt
  • Defekte Anwendungslogik

Erkennen Sie abnormale Werte so früh wie möglich.

10. Verwenden Sie BigDecimal für Geld und exakte Berechnungen

Wie bisher gezeigt, ist double sehr praktisch, aber es kann Präzisionsfehler nicht vollständig vermeiden.

Daher ist es ungeeignet für:

  • Geldberechnungen
  • Punkte- oder Saldenverwaltung
  • Strenge Rundungsanforderungen

10.1 Was ist BigDecimal?

BigDecimal ist eine Klasse, die Dezimalzahlen exakt in Basis 10 verarbeitet. Sie ist dafür konzipiert, Präzisionsverluste zu vermeiden.

BigDecimal a = new BigDecimal("0.1");
BigDecimal b = new BigDecimal("0.2");

BigDecimal result = a.add(b);
System.out.println(result); // 0.3

10.2 Wichtige Regel bei der Verwendung von BigDecimal

Ein BigDecimal direkt aus einem double zu erstellen, überträgt Präzisionsfehler.

new BigDecimal(0.1); // Not recommended

Erstellen Sie es immer aus einem String stattdessen:

new BigDecimal("0.1"); // Correct

10.3 Auswahl zwischen double und BigDecimal

  • Leistung und Einfachheit → double
  • Genauigkeit über alles → BigDecimal

Zwingen Sie nicht alles in einen Typ.
Wählen Sie je nach Zweck.

11. Zusammenfassung: Java double korrekt verwenden

Fassen wir die wichtigsten Punkte dieses Artikels zusammen:

  • double ist der grundlegende Dezimaltyp von Java
  • Präzisionsfehler sind Teil der Spezifikation
  • Verwenden Sie Toleranzen für Vergleiche
  • Achten Sie auf Ganzzahldivision
  • Verwenden Sie BigDecimal für exakte Berechnungen

Sobald Sie verstehen, wie double funktioniert, wird numerische Programmierung viel weniger einschüchternd.

12. Häufig gestellte Fragen (FAQ)

Q1. Wie viele Stellen sind in Java double genau?

Etwa 15–17 signifikante Stellen. Dezimalwerte werden als Annäherungen behandelt.

Q2. Sollte ich double oder float verwenden?

In den meisten Fällen verwenden Sie double, es sei denn, Sie haben einen zwingenden Grund, float zu wählen.

Q3. Ist es schlecht, double für Geld zu verwenden?

Ja. Es wird nicht empfohlen. Verwenden Sie BigDecimal für sichere Geldberechnungen.

Q4. Kann ich “==” zum Vergleich von double-Werten verwenden?

Nein. Verwenden Sie stattdessen eine Toleranz (Epsilon).

Q5. Wie sollte ich NaN und Infinity handhaben?

Verwenden Sie Double.isNaN() und Double.isInfinite(), um sie früh zu erkennen und explizit zu behandeln.