The PIT
Röster från ITM-koncernen.

Double vs Decimal

November 25, 2008 10:37 by Stefan Karlsson

 

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


Tags:
Categories: Programmering | .Net
Actions: E-mail | Permalink | Comments (0) | Comment RSSRSS comment feed