Ich möchte ROUND_UP als Rundungsmodus verwenden. Wenn die Dezimalstellen in der ursprünglichen Zahl jedoch weniger als drei Dezimalstellen sind, wird am Ende "1" angehängt.Problem mit Rundungsmodus in ROUND_UP in Java
int precision = 3;
double[] values = { 1.9024999999999999, 2.1234, 2.2835, 2.04 };
for (double value : values) {
BigDecimal bd1 = new BigDecimal(value);
bd1 = bd1.setScale(precision, BigDecimal.ROUND_UP);
System.out.println(value + "===========" + bd1.doubleValue());
}
Der Ausgang ist, wie unten -
1.9024999999999999===========1.903
2.1234===========2.124
2.2835===========2.284
2.04===========2.041
Darf ich fragen, warum der wahre Wert von '2.04' derjenige ist, den Sie sagten? – dabadaba
@dabadaba: Weil das der doppelte Wert für 2.04 ist. Der Wert 2.04 kann im binären Fließkomma nicht genau dargestellt werden. –
Ja, ich könnte das lesen. Ich nehme an, das bedeutet, dass es keine Möglichkeit gibt, einen präzisen '2.04' in Gleitkommazahlen zu speichern. – dabadaba