2016-07-06 9 views
0

Die folgende Routine wird voraussichtlich zurückgeben, aber stattdessen gibt 0.9999999999999999 zurück.So vermeiden Sie Berechnungsfehler mit Primitiven

double sum = 0; 
for(int i=0; i<10; i++){ 
    sum+=0.1; 
} 
System.out.println(sum); 

Der gleiche Fehler tritt auch bei anderen Java-mathematischen Operationen auf.

Gibt es eine Möglichkeit, dieses Problem zu vermeiden?

Vielen Dank im Voraus.

+0

Es ist kein Fehler. Es ist die Natur von Fließkommaoperationen. – meskobalazs

+1

Gleitkommaarithmetik ist inhärent ungenau. Du könntest es mit '' 'BigDecimal''' versuchen, aber das ist viel langsamer. –

+0

Ich nehme an, Sie könnten es runden, wenn Sie nur ganze Zahlen brauchen – Zac

Antwort

1

Dies nennt man einen Gleitkommafehler. Es ist natürlich und zu erwarten. Um dies zu vermeiden, verwenden Sie Variablen mit höherer Genauigkeit, z. B. BigDecimal. Allerdings ist BigDecimal langsamer, um Berechnungen durchzuführen, also überlegen Sie, wie wichtig Genauigkeit in Ihrer Lösung ist.

Ich würde die Verwendung BigDecimal trotz Leistungseinbußen empfehlen, wenn diese Mengen Währung darstellen. Es ist wichtiger, dass Ihre Berechnung in diesem Fall korrekt ist als schnell.

Verwandte Themen