Se nedanstående kod:
Dim x As Double = 3.65
Dim y As Double = 0.05
Dim z As Double = 3.7
MsgBox((x + y) & " - " & z) ' 3.7 - 3.7
MsgBox((x + y) = z) ' False
Som ni ser så evalueras x+y till 3.7 och när man jämför det med z som också är 3.7 så får man FALSE. 3.7 är alltså inte lika med 3.7.
Ändra ovanstående kod till att använda Decimal istället:
Dim x As Decimal= 3.65
Dim y As Decimal = 0.05
Dim z As Decimal = 3.7
MsgBox((x + y) & " " & z) '3.70 - 3.7
MsgBox((x + y) = z) 'TRUE
Nu är helt plötsligt x+y samma som z.
Det är alltså viktigt att förstå att Double inte alltid beter sig som man kan tro och om man nu skulle använda Double för att hantera t.ex. pengar och i ett program kontrollera om betalt belopp är samma som fakturerat belopp så kan man få oanade konsekvenser.
Varför det blir på det här viset förklaras närmare på nedanstående länk:
http://www.yoda.arachsys.com/csharp/floatingpoint.html
Happy coding!
/Stefan