Арифметика с плавающей запятой почти никогда не верна, когда задействовано .1
. Причина в том, что .1
не может быть представлен как 1/2^n
в пределах 16 цифр от n
.
Это несколько чисел, с которыми не было бы проблем с плавающей запятой, потому что они могут быть представлены как 1/2^n
:
- 0.128 = 1/2 ^ 5
- 0,5 = 1/2 ^ 1
- 0,375 = 1/2 ^ 2 + 1/2 ^ 3
Таким образом, тип десятичный приходит, чтобы решить проблему. Это лучший способ:
Sub TestMe()
Dim a, b, c 'declaring as Variant, as Decimal cannot be declared in VBA
a = CDec(10)
b = CDec(1.11)
c = CDec(11.1)
Debug.Print a * b = c
End Sub