Heim  >  Artikel  >  Java  >  So vermeiden Sie Gleitkomma-Präzisionsfehler in Java: Floats, Doubles und BigDecimal

So vermeiden Sie Gleitkomma-Präzisionsfehler in Java: Floats, Doubles und BigDecimal

Susan Sarandon
Susan SarandonOriginal
2024-11-18 04:43:02766Durchsuche

How to Avoid Floating Point Precision Errors in Java: Floats, Doubles, and BigDecimal

Vermeiden von Gleitkomma-Präzisionsfehlern mit Floats und Doubles in Java

Bei der Arbeit mit großen Summen von Floats oder Doubles in Java kommt es zu einer Anhäufung von Gleitkommazahlen Präzisionsfehler können ein Problem sein. Dieser Fehler tritt auf, weil Floats oder Doubles bestimmte numerische Werte wie 0,1 nicht präzise darstellen können.

Beachten Sie den folgenden Code:

for (float value = 0.0f; value < 1.0f; value += 0.1f) {
    System.out.println(value);
}

Erwartete Ausgabe:

0.1
0.2
0.3
...
0.9

Tatsächliche Ausgabe:

0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.70000005
0.8000001
0.9000001

Wie offensichtlich ist, weicht die Ausgabe aufgrund von Gleitkomma-Ungenauigkeiten von den erwarteten Werten ab. Um dieses Problem zu lösen, gibt es zwei Hauptansätze:

1. Passen Sie die Anzeigegenauigkeit an und lassen Sie Toleranzen zu.

Beschränken Sie bei Verwendung des Doppeltyps die Anzeige auf die erforderliche Anzahl von Ziffern und führen Sie eine kleine Toleranz für Gleichheitsprüfungen ein. Dies ermöglicht die Darstellung von Zahlen wie 0,1 ohne nennenswerte Rundungsfehler.

2. Verwenden Sie BigDecimal für eine präzise Darstellung

Alternativ können Sie BigDecimal anstelle von Floats oder Doubles verwenden. BigDecimal bietet eine Möglichkeit, Zahlen mit beliebiger Genauigkeit darzustellen, Rundungsfehler zu vermeiden und eine exakte Darstellung von Werten wie 0,1 zu ermöglichen.

Unten ist ein Beispiel für die Verwendung von BigDecimal:

BigDecimal step = new BigDecimal("0.1");
for (BigDecimal value = BigDecimal.ZERO;
     value.compareTo(BigDecimal.ONE) < 0;
     value = value.add(step)) {
    System.out.println(value);
}

Dieser Code wird gedruckt :

0.1
0.2
0.3
...
0.9

Durch die Wahl des geeigneten Ansatzes können Entwickler Gleitkomma-Präzisionsfehler bei der Arbeit mit Floats oder Doubles in Java effektiv minimieren oder beseitigen.

Das obige ist der detaillierte Inhalt vonSo vermeiden Sie Gleitkomma-Präzisionsfehler in Java: Floats, Doubles und BigDecimal. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn