Runden muss man können

Habt ihr gewusst, dass Math.Round nicht nach dem Standard-Schulverfahren rundet, wie man es aus der Grundschule kennt, sondern nach dem Standard IEEE 754, Abschnitt 4? Das ist das sogenannte „Banker’s Rounding“ und funktioniert so, dass bei Werten die genau in der Mitte stehen (z.B. 1,5), die Werte nicht generell aufgerundet werden, sondern nur dann aufgerundet werden, wenn der Wert davor ungerade ist. Bei geraden Werten wird der Rest einfach abgeschnitten und somit abgerundet.
Beispiel:


Math.Round(1.5,0); // = 2
Math.Round(2.5,0); // = 2


Somit kann der allgemeine Rundungsfehler, der sich normalerweise immer nur nach oben ausdehnt, fast komplett ausgeglichen werden. Ich muss zugeben, dass dieses Verhalten etwas gewöhnungsbedürftig ist. Wenn man das Verhalten so haben möchte, wie man es aus der Grundschule kennt, dann gibt es einen kleinen weiteren Parameter in der Round-Methode, die dann wieder ordentlich rundet.


Math.Round(1.5,0, MidpointRounding.AwayFromZero) //=2
Math.Round(2.5,0, MidpointRounding.AwayFromZero) //=3

Published 20 Oktober 2009 05:21 von Dosihris

Kommentare

Keine Kommentare

Kommentar abgeben

(verpflichtend) 
(verpflichtend) 
(optional)
(verpflichtend) 
Nico Franze Herzlich Willkommen auf meinem Blog. Ich bin Nico, freier Softwareentwickler sowie Autor für Fachzeitschriften. Hab mit .NET Version 1.0 begonnen (damals noch VB.Net) und bin dann schlussendlich bei C# gelandet. Mehr Infos gibts unter www.nfranze.de


Suche

Los

Translator Widget

Dieser Blog

Syndikation


Locations of visitors to this page