Pourquoi mon application me signale t'elle un dépassement de capacité?
Le code suivant est incorrect et génère une erreur :
Dim result As Long result = 100 * 1000
Pourtant, le résultat (100000) est compatible avec le type long.
Explication : Quand il effectue des opérations arithmétiques entre 2 expressions, VB produit un résultat
intermédiaire (avant affectation) qui est du même type que celui de l'expression ayant le type le plus précis.
L'ordre de précision, du plus précis au moins précis est :
Byte, Integer, Long, Single, Currency,
Double, and Decimal.
Les constantes non suffixées comme 100 ou 10000 sont de type Integer. VB essaie donc de créer un résultat intermédiaire de type Integer pour y stocker 100000, ce qui est en dehors de
la plage pour ce type (-32768, +32767).
Pour éviter cela, on peut spécifier que les constantes sont de type Entier
Long, en ajoutant le signe & en suffixe :
result = 100& * 1000&
Note : une bonne pratique est de ne pas utiliser de constantes numériques ("nombres magiques") dans le code.
On devrait préférer une déclaration explicite d'une constante, de préférence bien typée. Par exemple pour une constante de type Entier Long :
Const Pesanteur As Long = 10
On peut retrouver des explications complètes dans l'aide en ligne, section opérateurs, par exemple pour la multiplication : :
|