Sonntag, 6. November 2011

Math.Round() und seine Tücken

Ein nicht unübliches Thema: man rechnet ein wenig mit Fließkommazahlen (double, float, decimal) und da eine leichte Ungenauigkeit in deren Natur liegt, wird vor dem Vergleich gerundet. Schönerweise gibt es in C# dafür die Methode z.B. Math.Round(double). Die Überraschung folgt erst, wenn man etwa in einem Test dann etwas in der folgenden Art schreibt:

Assert.AreEqual(5, Math.Round(4.5, 0));

Also Runden auf ganze Zahlen. Nachdem das fehlgeschlagen hat, wundert sich der Entwickler natürlich. Und schlägt nach. Aha, es gibt also eine Überladung dieser Methode, bei der die Rundungsmethode festgelegt werden kann.

Assert.AreEqual(5, Math.Round(4.5), MidPointRounding.AwayFromZero);

Das funktioniert. Allerdings hätte ich erwartet, dass der Standard das kaufmännische Runden ist...

Keine Kommentare:

Kommentar veröffentlichen