Immer eine Idee voraus

Tipps & Tricks: Fliesskommazahlen in .NET

(01.11.2022)

Ausgangslage

Wenn 1/3 nicht gleich 0,333333333 ist, hat man vermutlich mit dem Datentyp float oder double gearbeitet. In Geschäftsanwendungen können solche Abweichungen zu falsch ermittelten Preise, Gewichten und Abmessungen führen. In der Folge kommt es zu seltenem und schwer nachvollziehbarem Fehlverhalten.

Ein einfaches Beispiel zur Illustration:

In beiden Fällen werden die Werte als ungleich festgestellt. Viele Entwickler gehen davon aus, dass ihr Vergleich tut, was sie erwarten. Was allerdings nicht so ist und zu Verwunderung beim Debuggen führt.

Wie kann das Problem vermieden werden?

Wenn man die Wahl hat, sollte man mit dem Datentyp decimal arbeiten.

Hat man diese Option nicht, muss man bei Vergleichen eine Toleranz (Epsilon) berücksichtigen.

Im ergänzten Codebeispiel wird auf die zweite Nachkommastelle genau verglichen und im Ergebnis werden die beiden Zahlen als gleich gewertet.

Da der Fall in unseren Projekten oft vorkommt, haben wir Erweiterungsmethoden dafür in unserer allgemeinen Bibliothek.