Tout cela est très simple en fait, contrairement aux apparences ;-)))
Les ordinateurs utilisent le système binaire et non le système décimal.
Cela conduit à de très légères approximations lors de la conversion de
nombres non entiers.
Avec des variables déclarées comme Double, le niveau de précision est tel
que ces approximations génèrent un écart (infime, mais non nul) lors
de l'addition. Il n'y a donc pas d'égalité, ce qu'on peut vérifier avec :
Sub CompareDouble()
Dim i As Double, j As Double, k As Double
i = 130.88
j = 120.2
k = 251.08
MsgBox k - (i + j)
End Sub
MsgBox affiche un écart de 2,8421709430404E-14, soit 2,84 que
multiplie 10 puissance -14. Par conséquent le test d'égalité échoue.
En déclarant les variables en Single, c'est-à-dire avec une précision
moindre (4 octets au lieu de 8), l'écart n'est plus perceptible.
Partager