Heim > Java > javaLernprogramm > Hauptteil

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

Susan Sarandon
Freigeben: 2024-11-18 04:43:02
Original
766 Leute haben es durchsucht

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);
}
Nach dem Login kopieren

Erwartete Ausgabe:

0.1
0.2
0.3
...
0.9
Nach dem Login kopieren
Nach dem Login kopieren

Tatsächliche Ausgabe:

0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.70000005
0.8000001
0.9000001
Nach dem Login kopieren

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);
}
Nach dem Login kopieren

Dieser Code wird gedruckt :

0.1
0.2
0.3
...
0.9
Nach dem Login kopieren
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage