Feedback

C# - Runden vor dem Komma

Veröffentlicht von am 14.11.2015
(0 Bewertungen)
Analog zu Math.Round übergibt man bei dieser Methode eine numerische Zahl mit der Anzahl der Stellen, die VOR dem Komma gerundet werden sollen. Um z.B. den nächsten Zehnerwert von 316 zu finden, übergibt man 1, für Hunderter 2 usw.


overround(316) // 316
overround(316, 1) // 320
overround(316, 2) // 300
overround(316, 3) // 0
overround(501, 0) // 501
overround(501, 1) // 500
overround(501, 2) // 500
overround(501, 3) // 1000
public static int overround(object input, int length = 0)
{
    if (input is int | input is double | input is decimal | input is float)
    {
        double value = Convert.ToDouble(input);
        int div = (int)Math.Pow(10, length);
        return ((int)Math.Round(value / div, 0) * div);
    }
    throw new ArgumentException("Input is not numeric");
}
Abgelegt unter Math.

1 Kommentare zum Snippet

Koopakiller schrieb am 14.11.2015:
Und was ist mit Byte, Short und Long sowie deren jeweiligen U/S-Versionen?

Ich würde verschiedene Überladungen für jeden Typ schreiben, da eben nicht alles gleich funktioniert. Beispielsweise könnte man mit einem Großen Dezimal arbeiten und deine Methode würde fehlerhaft runden, da Double weniger genau ist. Das ist das ewige Problem der vielen Zahlen-Typen.

Wenigstens solltest du jedoch verlangen das input IConvertible implementiert. Am besten über die Einschränkung eines generischen Typs.
 

Logge dich ein, um hier zu kommentieren!