- 1 1. Was ist der double‑Typ von Java?
- 2 1.1 double ist „Double‑Precision Floating‑Point“
- 3 1.2 Ein praktisches Bild dessen, was double darstellen kann
- 4 1.3 In Java sind Dezimal‑Literals standardmäßig double
- 5 1.4 Häufige Anwendungsfälle für double
- 6 1.5 Wichtige Punkte, die man zuerst merken sollte
- 7 2. double‑Bereich und Präzision (Ein Leitfaden zu signifikanten Stellen)
- 8 2.1 Der numerische Bereich, den double darstellen kann
- 9 2.2 Signifikante Stellen sind ungefähr 15 bis 17 Stellen
- 10 2.3 “High Precision” Does Not Mean “Exact Decimals”
- 11 2.4 Why Significant Digits Matter
- 12 2.5 Correct Understanding Based on Range and Precision
- 13 3. Differences Between double and float (Which Should You Use?)
- 14 3.1 The Basic Differences Between float and double
- 15 3.2 Why double Is the Standard in Java
- 16 3.3 When You Should Use float
- 17 3.4 A Simple Rule for Beginners
- 18 3.5 Warum das Verständnis dieses Unterschieds wichtig ist
- 19 4. Grundlegende Verwendung von double (Deklaration, Berechnung, Ausgabe)
- 20 4.1 Deklarieren und Zuweisen eines double
- 21 4.2 Die vier grundlegenden arithmetischen Operationen
- 22 4.3 Eine wichtige Vorsicht bei der Division
- 23 4.4 Berechnungsergebnisse ausgeben
- 24 4.5 Ausgabe mit einer festen Anzahl von Stellen
- 25 4.6 Zusammenfassung der Grundlagen von double‑Berechnungen
- 26 5. Häufiges Problem #1: Warum Präzisionsfehler auftreten
- 27 5.1 Ein klassisches Beispiel für einen Präzisionsfehler
- 28 5.2 Warum dieser Fehler auftritt
- 29 5.3 Immer davon ausgehen, dass Fehler auftreten können
- 30 5.4 Wenn Fehler normalerweise keine Rolle spielen
- 31 5.5 Wie Sie mit Präzisionsfehlern umgehen sollten
- 32 6. Häufige Falle #2: Die Verwendung von „==“ zum Vergleich von double-Werten ist gefährlich
- 33 6.1 Was passiert, wenn Sie „==“ verwenden
- 34 6.2 Die goldene Regel für den Vergleich von double-Werten
- 35 6.3 Vergleich mit einem Epsilon (Toleranz)
- 36 6.4 Wie wählt man ein Epsilon aus?
- 37 6.5 Wie sich das von BigDecimal unterscheidet
- 38 6.6 Zusammenfassung der Vergleichsregeln
- 39 7. Häufige Falle #3: Ganzzahlige Division ergibt Null
- 40 7.1 Warum Ganzzahlige Division passiert
- 41 7.2 Wie man Dezimaldivision korrekt durchführt
- 42 7.3 Ein häufiger Fehler in der Praxis
- 43 7.4 Regeln, die Anfänger sich merken sollten
- 44 7.5 Zusammenfassung der Ganzzahldivisionsfalle
- 45 8. Konvertieren zwischen String und double (am häufigsten in der Praxis)
- 46 8.1 Einen String in double konvertieren
- 47 8.2 Unterschied zwischen Double.valueOf()
- 48 8.3 Einen double in String konvertieren
- 49 8.4 Immer formatierte Strings für die Anzeige verwenden
- 50 8.5 Wichtige Punkte zur String‑Konvertierung
- 51 9. Sonderwerte in der Double‑Klasse (NaN / Infinity)
- 52 9.1 Was ist NaN (Not a Number)?
- 53 9.2 Was ist Unendlichkeit?
- 54 9.3 Wie man NaN und Infinity prüft
- 55 9.4 Warum frühe Erkennung wichtig ist
- 56 10. Verwenden Sie BigDecimal für Geld und exakte Berechnungen
- 57 10.1 Was ist BigDecimal?
- 58 10.2 Wichtige Regel bei der Verwendung von BigDecimal
- 59 10.3 Auswahl zwischen double und BigDecimal
- 60 11. Zusammenfassung: Java double korrekt verwenden
- 61 12. Häufig gestellte Fragen (FAQ)
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:
doubleist 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 accuratelyb(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:
doublecan 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:
| Type | Bits | Typical Precision | Main Use |
|---|---|---|---|
| float | 32-bit | About 6–7 digits | Lightweight / lower precision |
| double | 64-bit | About 15–17 digits | Standard / 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
doubleis usually negligible - Bugs caused by insufficient precision tend to be more serious
doubleis 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
floatonly 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:
doubleunterstü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.
aist nahe bei0.30000000000000004bist eine andere Annäherung, die0.3darstellt
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 Berechnungen1e-12: sehr streng1e-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 werdenBigDecimal: 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
doublezu erhalten, reicht nicht aus
7.5 Zusammenfassung der Ganzzahldivisionsfalle
- Die Ursache liegt in den Operanden‑Typen und der Auswertungsreihenfolge
- Verwenden Sie von Anfang an
doublein 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 primitivesdoublezurückvalueOf→ gibt einDouble‑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:
doubleist der grundlegende Dezimaltyp von Java- Präzisionsfehler sind Teil der Spezifikation
- Verwenden Sie Toleranzen für Vergleiche
- Achten Sie auf Ganzzahldivision
- Verwenden Sie
BigDecimalfü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.

