Alles ist korrekt.
Sie können einige High-Level-Details in another answer on SO lesen oder mehr in documentation to BigDecimal
lesen ist es nicht üblich BigDecimal
Konstruktor mit double
param zu verwenden, weil es genau das darstellen, was in double
ist. So , wenn Sie schreiben: new BigDecimal(20.775)
Sie müssen nicht unbedingt 20,775 als Folge haben (eher werden Sie so etwas wie 20.77499999999999857891452847979962825775146484375
haben)
Für Sie Test:
1) Prüfung BigDecimal Darstellung
a) System.out.println(new BigDecimal(20.775));
=>20.77499999999999857891452847979962825775146484375
b) System.out.println(new BigDecimal("20.775"));
=>20.775
2) Test mit verschiedenen BigDecimal
Konstruktoren Abrunden:
a) new BigDecimal(20.775)
nach dem Runden der Hälfte wird 20,77 angezeigt.
b) new BigDecimal("20.775")
nach dem Runden die Hälfte zeigt 20,78.
c) new BigDecimal(String.valueOf(20.775)
nach dem Runden der Hälfte wird 20,78 angezeigt.
So als Fazit: Verwenden Sie nicht BigDecimal
Konstruktor mit double
param. Verwenden Sie stattdessen BigDecimal
Konstruktor mit String
param.
Hoffe, es hilft
Mögliche Duplikat [Unvorhersehbarkeit des BigDecimal (double) Konstruktor] (https://stackoverflow.com/questions/12218515/unpredictability-of-the-bigdecimaldouble-constructor) – Goibniu
BigDecimal rundet korrekt. Sie verwenden doubleValue(), was die Inkorrektheit verursacht. –