2017-02-06 2 views
0

Gibt es trotzdem, um zu überprüfen, ob ein Double eine Java-Rundung aufweist, z. -260.01079999999996Wie überprüfe ich, ob ein Double eine Java-Rundung hat?

Ich habe ein System, das einen berechneten doppelten Wert übergibt. Von rechts sollte -260.0108 sein.

+1

Warum stören? Verwenden Sie einfach 'BigDecimal' und sorgen Sie sich nicht darum. – TedTrippin

+2

Normalerweise würden Sie es mit einem beliebigen Epsilon-Wert vergleichen. Obwohl es ein "Rundungsproblem" genannt wird, erscheint es ein bisschen komisch, da niemand herumrundet und niemand danach gefragt hat. –

+1

Sie sollten immer davon ausgehen, dass es ein potenzielles Rundungsproblem gibt, wenn Sie nicht wissen, dass es keine –

Antwort

0

Bei Floats und Doubles sind die "Probleme" bei der Rundung auf die Einschränkungen von Digitalrechnern zurückzuführen.

Wenn Sie keine Rundung wünschen, verwenden Sie Ganzzahlen. Wenn Sie eine Nummer mit einer festen Anzahl von Ziffern nach dem Komma speichern müssen, verwenden Sie eine BigDecimal; oder richte dein Doppel immer an der X. Stelle nach dem Komma ein; oder verwenden Sie die Zahl als Ganzzahl, während Sie sie durch 10^n teilen oder multiplizieren, bevor Sie sie anzeigen (siehe unten).

Zum Beispiel könnten Sie -2600108 als ganze Zahl und einen Faktor 1000 speichern. Addition, Subtraktion, Multiplikation und Speicherung funktionieren in diesem Fall einwandfrei und ohne Nebenwirkungen. Die Division braucht jedoch Doppel.

0

Wenn Sie von externen Beweisen wissen, dass die genaue Antwort an einem bestimmten Punkt in Ihrem Code eine ganze Zahl sein muss, runden Sie die nächste Ganzzahl dort ab.

Andernfalls erhalten Sie das genaueste doppelte Ergebnis, indem Sie die volle Genauigkeit durch Ihre Berechnungen mit DecimalFormat, um nur die sinnvollen Ziffern zu drucken.

Es gibt nichts besonderes über "Java-Rundung". Das Besondere ist, dass die Standardausgabe genügend Ziffern enthält, um das Double eindeutig zu identifizieren. Viele andere Sprachen sind standardmäßig auf weniger Stellen gerundet, verlieren ihre Genauigkeit, machen aber die Ergebnisse übersichtlicher.

Die Verwendung von BigDecimal ist ein großer Gewinn, wenn jede Zahl in der Berechnung genau als kurzer Dezimalbruch dargestellt werden kann. Das passiert oft bei Währungsberechnungen. Sobald Sie jedoch einen Bruchteil wie 1/3 treffen, der nicht durch eine endliche Anzahl von Dezimalziffern genau dargestellt werden kann, müssen Sie trotzdem mit einem Rundungsfehler rechnen. Für viele Finanzberechnungen gibt es feste Regeln für die Rundung.

In der Theorie könnte BigDecimal auch verwendet werden, um zusätzliche Präzision zu erhalten, aber das ist selten praktikabel.

Verwandte Themen