Java - Auf zwei Dezimalstellen runden, basierend auf dem dritten Dezimalwert [Duplikat]
Dec 16 2020
Ich sitze seit einem Tag darauf und denke jetzt wie ein Schüler der 5. Klasse.
public class Tester
{
static String actualValue = "";
private static DecimalFormat df2 = new DecimalFormat("#.##"); //To round off to two decimal places.
static double regPrice = 0.0;
static double regPrice2 = 0.0;
public static void main(String[] args)
{
regPrice2 = 1506.365;
System.out.println("reg price 1 is: "+regPrice2);
System.out.println("reg price 1 after rounding is is: "+round(regPrice2));
regPrice = 8535.765;
System.out.println("reg price is: "+regPrice);
System.out.println("reg price after rounding is: "+round(regPrice));
}
public static double round(double value)
{
df2.setRoundingMode(RoundingMode.HALF_UP);
String returnValue = df2.format(value);
double actualValue = Double.parseDouble(returnValue);
return actualValue;
}
}
Ausgabe | Wert 1 | Wert 2 |
---|---|---|
Tatsächlich | 1506,37 | 8535. 76 |
Erwartet | 1506,37 | 8535. 77 |
Warum funktioniert die Abrundung für die erste Zahl, aber nicht für die zweite? Wie kann ich das zum Laufen bringen?
Antworten
1 TomášZáluský Dec 16 2020 at 07:51
Dank der Gleitkomma-Darstellung ist die Zahl Ihrer Meinung nach 1506.365 oder 8535.765 tatsächlich etwas größer oder kleiner als erwartet. Die Gleitkommazahlen werden als Mantisse und Exponent dargestellt. So erfolgt beispielsweise für 0,365 und 0,765 die Rundung unterschiedlich. Das Runden in der Nähe von Hälften erscheint dann wie in zufälliger Richtung. Verwenden BigDecimal
Sie diese Option, wenn Sie eine genaue Nummer benötigen.