Keine Runde Sache: Math.Round

Jetzt entwickle ich ja doch schon eine gewisse Zeit mit dem .NET Framework. Doch man entdeckt immer wieder was neues. Klar das Framework ist recht umfangreich, da hat man nicht unbedingt Gelegenheit jede Methode einmal auszuprobieren. Doch ich dachte ich weiß, wie so eine ‚elementare‘ Funktionen wie Math.Round funktioniert.

Math.Round(3.5); // Ergebnis: 4

So hätte ich das erwartet – und so ist es auch.

Math.Round(2.5); // Ergebnis: 2

Doch das kam jetzt unerwartet. Der Grund dafür ist ganz einfach. Das ist eine Voreinstellung im .NET Framework. Nennt sich „banker’s rounding“. Es gibt eine Überladung von Math.Round, mit der man das beeinflussen kann.

Math.Round(2.5, MidpointRounding.AwayFromZero); // Ergebnis: 3

So weit so gut. Wieder was gelernt. Doch leider war das nur die halbe Wahrheit. Aufgrund der internen Darstellung der Datentypen, kann es bei Konvertierungen passieren, dass die Werte nicht wie gewünscht gerundet werden. Beispiel gefällig?

Math.Round(3,995, 2); // Ergebnis: 4
Math.Round(3,995f, 2); // Ergebnis: 3,99
Math.Round(3,995f, 2, MidpointRounding.AwayFromZero); // Ergebnis: 3,99

Quelle: MSDN: Math.Round

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert