Wie vermeide ich Gleitkomma-Präzisionsfehler in Java?
Nov 17, 2024 pm 07:16 PMVermeiden von Gleitkomma-Präzisionsfehlern mit Floats und Doubles in Java
In Java Operationen mit Gleitkommazahlen (Floats und Doubles) kann zu Präzisionsfehlern führen. Diese Fehler entstehen, weil Floats und Doubles Zahlen in binärer Form darstellen, die nicht für alle Dezimalwerte exakte Darstellungen liefert.
Bedenken Sie den folgenden Code:
for (float value = 0.0f; value < 1.0f; value += 0.1f) System.out.println(value);
Anstelle der erwarteten Werte Die Ausgabe zeigt Inkremente von 0,1 mit einer leichten Anhäufung von Fehlern an:
0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.70000005 0.8000001 0.9000001
Behebung der Präzisionsfehler
Um dieses Problem zu vermeiden, ziehen Sie die folgenden Ansätze in Betracht:
- Verwenden Sie Toleranz bei Vergleichen: Wenn Sie Floats oder Doubles auf Gleichheit vergleichen, lassen Sie in beiden Fällen eine kleine Toleranz zu, um mögliche Präzisionsfehler zu berücksichtigen.
- Verwenden Sie BigDecimal: Alternativ können Sie die BigDecimal-Klasse verwenden, die exakte Dezimaldarstellungen von Zahlen bereitstellt. Hier ist ein Beispiel:
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 stellt den Wert genau dar und erhöht ihn um 0,1, wodurch die Anhäufung von Präzisionsfehlern vermieden wird.
Das obige ist der detaillierte Inhalt vonWie vermeide ich Gleitkomma-Präzisionsfehler in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Wie funktioniert der Klassenladungsmechanismus von Java, einschließlich verschiedener Klassenloader und deren Delegationsmodelle?

Top 4 JavaScript -Frameworks in 2025: React, Angular, Vue, Svelte

Wie kann ich JPA (Java Persistence-API) für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden verwenden?

Wie benutze ich Maven oder Gradle für das fortschrittliche Java -Projektmanagement, die Erstellung von Automatisierung und Abhängigkeitslösung?

Node.js 20: wichtige Leistungssteigerung und neue Funktionen

ICEBERG: Die Zukunft von Data Lake Tabellen

Spring Boot Snakeyaml 2.0 CVE-2022-1471 Problem behoben

Wie kann ich funktionale Programmierungstechniken in Java implementieren?
