Mit dieser Funktion können double-Werte mit einer anderen Schrittgröße gerundet werden.
Normalerweise beträgt die Schrittgröße beim Runden 1, also es wird auf 0 und 1 gerundet.
Zahl ist die zu rundende Zahl
Stelle gibt an, auf welche Stelle hinter (>=1) oder vor (<=0) dem Komma gerundet werden soll.
step ist die Schrittgröße, dessen Kehrwert ganzzahlig sein muss.
Mit mode wird angegeben, ob im Zweifelsfall, also wenn eine Zahl sich genau zwischen den beiden möglichen Rundungszielen befindet, auf- oder abgerundet werden soll. Dieser Parameter ist optional und würde bei Nichtangabe zum Aufrunden im Zweifelsfall führen.
Beispiel: Zahl = 9.76, Stelle = 1, step = 0.5
Hier ist die Schrittgröße 0.5, also wird auf 0, 0.5 und 1 gerundet
Das Ergebnis wäre 9.75
Beispiel für Zweifelsfall:
Zahl = 0.25, Stelle = 0, step = 0.5
Die Zahl befindet sich genau zwischen den möglichen Rundungszielen von 0 und 0.5.
Wird AwayFromZero als mode angeben, wird auf 0.5 aufgerundet.
Ist mode aber ToEven, wird auf 0 abgerundet.
public static double RoundTo(double Zahl, int Stelle, double step, MidpointRounding mode = MidpointRounding.AwayFromZero)
{
double Out = 0;
if (Convert.ToInt32(1 / step) == (1 / step) && step > 0)
{
double Up = Math.Abs(Zahl) * Math.Pow(10, Stelle);
double temp = Up;
Up = Up % step;
if (Up < step / 2 || (Up == step / 2 && mode == MidpointRounding.ToEven))
{ Out = temp - Up; }//Abrunden
else if (Up > step / 2 || Up == step / 2 && mode == MidpointRounding.AwayFromZero)
{ Out = temp - Up + step; }//Aufrunden
if (Zahl < 0)
{ Out *= -1; }
Out /= Math.Pow(10, Stelle);
}
else
{ throw new ArgumentException("Keine gültige Schrittgröße angegeben. Der Wert muss zwischen 0 und 1 liegen und der Kehrwert eine natürliche Zahl ergeben"); }
return Out;
}
6 Kommentare zum Snippet