Sprache: C#
[b]Runden auf 0.05[/b] (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:
[b]0.325 ergibt 0.35[/b]
[b]0.324 ergibt 0.30[/b] und funktioniert auch mit negativen Zahlen.
Beispiel:
[code]decimal d = 0.325;
Console.Write(d.SwissCommercialRound())[/code]
Ausgabe:
[code]0.35[/code]
public static decimal SwissCommercialRound(this decimal input)
{
return Math.Round(input * 20.0M, MidpointRounding.AwayFromZero) * 0.05M;
}
public static decimal SwissCommercialRound(this decimal input)
{
return Math.Round(input * 20.0M, MidpointRounding.AwayFromZero) * 0.05M;
}
Alte URL:
/snippet/kaufmaennisch-runden-auf-0-05-schweizer-norm/1642
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.
Ok, ich habe vergessen darauf hinzuweisen, dass es sich hier um schweizerischen Standard handelt.
das heißt dann Rappenrundung.
@Ralf Schoch
Danke für die Hinweise. Ich habe den Artikel dahingehend angepasst