.NET C# Java Javascript Exception

 | 
Frage stellen Fragen ansehen Themen Benutzer Abzeichen RSS
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?
Themen:
09.08.09
tick.tock 21 1 1
Kommentieren - Für Rückfragen oder Anmerkungen
1
Eine coole Community hab ich hier gefunden ;-) Gruß aus der Pfalz!
tick.tock 09.08.09
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.09
FalkP 3,2k 2 7
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.09
tobias 149 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.09
2
das sollte doch eher so aussehen oder? :)
[code]import java.lang.Math;
myDouble = Math.round( myDouble / 100d ) * 100d;[/code]
Vayu 11.09.09
2
if (x%100 >= 50)
erg = (x / 100 + 1) * 100;
else
erg = (x / 100) * 100;
07.09.09
knoepke 101 1 1
2
C
int gerundet, wert;
gerundet = ((wert + 50) / 100) * 100;

oder
gerundet = (wert + 50) - (wert + 50)%100;
09.09.09
knoepke 101 1 1
ich bin mir unsicher ob die Subtraktion nicht doch in Klammern gehört
stefan.bachert 11.09.09
1
Genau so, wenn auf x Stellen nach dem Komma gerundet werden soll:
Multiplikation mit 10^x -> Runden -> Division
07.09.09
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.09
Mark 21 1 1
Deine Antwort
Entweder einloggen... ...oder ohne Wartezeit registrieren
Name
Passwort
Passwort wiederholen
E-Mail
Geworben von


Login mit OpenID

Mit einem OpenID-Account kannst Du dich auf allen Webseiten anmelden, die OpenID unterstützen. Du hast bereits ein Benutzerkonto bei einem der folgenden Provider? Dann kannst Du dich direkt bei codekicker damit registrieren.


OpenID-Provider anklicken: