Feedback

C# - Kaufmännisch Runden auf 0.05 (Schweizer Norm)

Veröffentlicht von am 10/25/2012
(2 Bewertungen)
Runden auf 0.05 (Schweizer Norm).

Die Funktion ist als Erweiterungsmethode auf dem Typ Decimal implementiert. Für kaufmännische Anwendungen sollte man Fliesskomma-Typen wie Double vermeiden und immer mit Decimal arbeiten.

Die Arbeitsweise der Funktion ist folgende:
0.325 ergibt 0.35
0.324 ergibt 0.30 und funktioniert auch mit negativen Zahlen.

Beispiel:
decimal d = 0.325;
Console.Write(d.SwissCommercialRound())


Ausgabe:
0.35
public static decimal SwissCommercialRound(this decimal input)
{
   return Math.Round(input * 20.0M, MidpointRounding.AwayFromZero) * 0.05M;
}

Abgelegt unter Runden, kaufmännisch Runden, Schweiz.

4 Kommentare zum Snippet

Ralf Schoch schrieb am 10/25/2012:
Vielleicht habe ich einen Denkfehler, aber meiner Meinung nach falsch.
Beim kaufmänischen Runden sollte folgendes rauskommen:
0.325 ergibt 0.33
0.324 ergibt 0.32

siehe auch
http://de.wikipedia.org/wiki/Rundung#Kaufm.C3.A4nnisches_Runden

Da Du auf 0.05 rundest (und diese Verhalten wohl auch haben möchtest) sollte es ggf. nicht "CommercialRound" heissen,
sondern einen Namen haben der auf dieses abweichende Verhalten auch hinweisst.
dotnetlab schrieb am 10/25/2012:
Ok, ich habe vergessen darauf hinzuweisen, dass es sich hier um schweizerischen Standard handelt.
Jakob Lis schrieb am 10/26/2012:
das heißt dann Rappenrundung.
dotnetlab schrieb am 10/27/2012:
@Ralf Schoch
Danke für die Hinweise. Ich habe den Artikel dahingehend angepasst
 

Logge dich ein, um hier zu kommentieren!