Ich bin gerade auf ein Verhalten innerhalb von BigDecimal
gestoßen, das mir vorher nicht bewusst war. ve verwendet sie immer als Alternative für Bereiche zu verdoppeln, wo Präzision wichtig ist. zum Beispiel in finanziellen Berechnungen.Gibt es andere Fehler, die BigDecimal ähnlich sind ("1.0"). Equals (new BigDecimal ("1") gibt false zurück?
jedoch vor kurzem ich auf diese Tatsache kam
new BigDecimal("1.0").equals(new BigDecimal("1")) == false
ich ich war überrascht, dies zugeben. Ich nehme an, es ist so, weil das erste eine Skala von 1 hat, während das zweite eine Skala von 0 hat, aber immer noch scheint es kontraintuitiv zu sein Ich denke, der Grund, warum ich nie hatte rennen Sie davor, weil wir immer die feste Skala BigDecimals
für finanzielle Berechnungen verwendet haben.
Überprüfung des BigDecimal
documentation das sehe ich sagt, dass compareTo() == 0
verwendet werden soll, für die Gleichstellung zu ignorieren Maßstab zu überprüfen, während die equals()
sowohl den Wert und die Skala vergleicht.
Gibt es noch andere ähnliche Fehler, die ich beachten sollte, wenn Sie BigDecimal
s mit verschiedenen Maßstäben verwenden?
Sie meinen nichts, was in den Java-Dokumenten nicht bereits dokumentiert wurde, glaube ich? – CKing
Ein ähnliches Problem ist, dass 'new BigDecimal (0.1)' und 'BigDecimal.valueOf (0.1)' unterschiedliche Ergebnisse liefern.Die erste ist eine Darstellung des doppelten Wertes und wird etwas wie "0.100000000000000000055511151231257827021181583404541015625" sein, während die zweite "0.1" ist. – Powerlord
In Verbindung stehend (mögliches Duplikat): http://stackoverflow.com/questions/19818537/why-is-bigdecimalnatural-ordering-inconsistent-with-equals – Maroun