| 

.NET C# Java Javascript Exception

1
Ich will folgendes Verhalten beim Runden:
12300 => 12300
12349 => 12300
12350 => 12400
12399 => 12400

Man kann aber scheinbar nur auf ganze Zahlen in Java runden. Wie kann ich den Effekt von oben erreichen?
News:
09.08.2009
tick.tock 51 1 2 2
1
Eine coole Community hab ich hier gefunden ;-) Gruß aus der Pfalz!
tick.tock 09.08.2009
6 Antworten
5
Wenn Runden nur für Nachkommastellen möglich ist, dann bleibt für deinen konkreten Fall immer noch die Division durch 100 -> Runden -> Multiplikation mit 100.
10.08.2009
FalkP 3,3k 3 8
5
Es gibt 2 etwas verbreitetere Wege:
1. Der Weg, den auch FalkP vorschlägt.
import java.lang.Math;
myDouble = Math.round( myDouble * 100d ) / 100d;

2. Der zweite geht über BigDezimal und bietet ein bischen mehr Einstellungsmöglichkeiten
import java.math.BigDecimal;
BigDecimal myDec = new BigDecimal( myDouble );
// Viele Nachkommstellen und ob auf- oder abgerundet werden soll
myDec = myDec.setScale( 2, BigDecimal.ROUND_HALF_UP );
07.09.2009
tobias 169 1 2
2
Die Variante über BigDecimal ist jedoch weitaus speicherintensiver, da für jede zugrunde liegende Operation ein eigenes BigDecimal (mit Subobjekten) generiert wird.

Wie bei vielen mathematischen Operationen kommt es natürlich auf die Skalierung an: 'mal kann man das machen, aber in einer Schleife blind mit BigDecimal zu arbeiten kann tödlich für die Performance sein.
knalli 07.09.2009
2
das sollte doch eher so aussehen oder? :)
[code]import java.lang.Math;
myDouble = Math.round( myDouble / 100d ) * 100d;[/code]
Vayu 11.09.2009
2
if (x%100 >= 50)
erg = (x / 100 + 1) * 100;
else
erg = (x / 100) * 100;
07.09.2009
knoepke 101 1 1
2
C
int gerundet, wert;
gerundet = ((wert + 50) / 100) * 100;

oder
gerundet = (wert + 50) - (wert + 50)%100;
09.09.2009
knoepke 101 1 1
ich bin mir unsicher ob die Subtraktion nicht doch in Klammern gehört
stefan.bachert 11.09.2009
1
Genau so, wenn auf x Stellen nach dem Komma gerundet werden soll:
Multiplikation mit 10^x -> Runden -> Division
07.09.2009
eicke 21 1 1
eicke 21 1 1
1
public static double runden(double wert, int stellen)
{
double gerundet = Math.round(wert * Math.pow(10d, stellen));
return gerundet / Math.pow(10d, stellen);
}
07.09.2009
Mark 21 1 1

Stelle deine Java-Frage jetzt!