Excel a problém s presnosťou výpočtov

Ak skúsim spočítať 0.000123456789012345 + 1 očakávam výsledok 1.000123456789012345, avšak excel mi vráti 1,00012345678901

Ak to skúsim zapísať do VBA dopadne to takto:

Sub test()

    Dim x As Double
    Dim y As Double
    x = 1.23456789012345E-04
    y = 1 + x
    MsgBox x & vbNewLine & y

End Sub


Na uloženie desatinných hodnôt do 14 číslic môžeme použiť dátový typ Double, ale pomocou funkcie konverzie VBA CDec môžeme uložiť až 28 desatinných miest. 

Premennú musíme deklarovať ako dátový typ Variant. Potom pomocou funkcie VBA CDEC môžeme previesť na typ údajov Decimal.

Sub test()

    Dim x As Variant
    x = CDec(1.23456789012345E-04) ' excel vba také číslo nevie správne zapísať
    x = 1 + x
    MsgBox x

End Sub

Sub test2()

    Dim x As Variant
    Dim y As Variant
    x = CDec(1.23456789012345E-04)
    y = CDec(1 + x)
    MsgBox y

End Sub

Sub test3()

    Dim x As Variant
    x = CDec("0,000123456789012345")
    x = x + 1
    MsgBox x

End Sub

Pokiaľ ide o obsadenie pamäte, Double spotrebuje 8 bajtov a CDEC spotrebuje 14 bajtov systémovej pamäte. Keď deklarujeme typ premennej ako Variant, hodnota bude Empty, ale Double bude 0.

Múdrosti som čerpal z https://www.wallstreetmojo.com/vba-cdec/.

Komentáre