Decimal, type de données (Visual Basic)

Contient des valeurs 128 bits (16 octets) signées représentant des nombres entiers 96 bits (12 octets) mis à l’échelle par une puissance de variable de 10. Le facteur de mise à l’échelle spécifie le nombre de chiffres à droite de la virgule décimale ; il est compris entre 0 et 28. Avec une échelle de 0 (aucune décimale), la valeur la plus élevée possible est +/-79 228 162 514 264 337 593 543 950 335 (+/-7,9228162514264337593543950335E+28). Avec 28 décimales, la valeur la plus élevée est +/-7,9228162514264337593543950335, et la plus petite valeur non nulle est +/-0,0000000000000000000000000001 (+/-1E-28).

Notes

Le type de données Decimal fournit le plus grand nombre de chiffres significatifs pour un nombre. Il prend en charge jusqu’à 29 chiffres significatifs et peut représenter des valeurs supérieures à 7,9228 x 10^28. Il convient particulièrement aux calculs, comme les calculs financiers, qui nécessitent un grand nombre de chiffres, mais qui ne peuvent pas tolérer les erreurs d’arrondi.

La valeur par défaut de Decimal est 0.

Conseils de programmation

  • Précision. Decimal n’est pas un type de données à virgule flottante. La structure Decimal contient une valeur entière binaire, ainsi qu’un bit de signe et un facteur de mise à l’échelle d’entier qui spécifie la partie de la valeur qui est une fraction décimale. Pour cette raison, les nombres Decimal ont une représentation plus précise en mémoire que les types à virgule flottante (Single et Double).

  • Les performances. Le type de données Decimal est le plus lent de tous les types numériques. Vous devez évaluer l’importance de la précision par rapport aux performances avant de choisir un type de données.

  • Extension. Le type de données Decimal s’étend à Single ou Double. Cela signifie que vous pouvez convertir Decimal en l’un de ces types sans rencontrer d’erreur System.OverflowException.

  • Zéros de fin. Visual Basic ne stocke pas les zéros de fin dans un littéral Decimal. Toutefois, une variable Decimal conserve tous les zéros de fin acquis par calcul. L'exemple suivant illustre ce comportement.

    Dim d1, d2, d3, d4 As Decimal
    d1 = 2.375D
    d2 = 1.625D
    d3 = d1 + d2
    d4 = 4.000D
    MsgBox("d1 = " & CStr(d1) & ", d2 = " & CStr(d2) &
          ", d3 = " & CStr(d3) & ", d4 = " & CStr(d4))
    

    La sortie de MsgBox dans l’exemple précédent est la suivante :

    d1 = 2.375, d2 = 1.625, d3 = 4.000, d4 = 4
    
  • Caractères de type. L'ajout du caractère de type littéral D à un littéral force ce dernier en type de données Decimal. L'ajout du caractère de type identificateur @ à un identificateur force ce dernier en type Decimal.

  • Type .NET Framework. Le type correspondant dans le .NET Framework est la structure System.Decimal.

Plage

Vous devrez peut-être utiliser le caractère de type D pour affecter une valeur importante à une variable ou à une constante Decimal. Cette exigence est due au fait que le compilateur interprète un littéral comme étant Long sauf si un caractère de type littéral suit le littéral, comme le montre l’exemple suivant.

Dim bigDec1 As Decimal = 9223372036854775807   ' No overflow.
Dim bigDec2 As Decimal = 9223372036854775808   ' Overflow.
Dim bigDec3 As Decimal = 9223372036854775808D  ' No overflow.

La déclaration pour bigDec1 ne produit pas de dépassement de capacité, car la valeur qui lui est affectée se situe dans la plage pour Long. La valeur Long peut être affectée à la variable Decimal.

La déclaration pour bigDec2 génère une erreur de dépassement de capacité, car la valeur qui lui est affectée est trop grande pour Long. Étant donné que le littéral numérique ne peut pas d’abord être interprété comme un Long, il ne peut pas être affecté à la variable Decimal.

Pour bigDec3, le caractère de type littéral D résout le problème en forçant le compilateur à interpréter le littéral comme un Decimal au lieu de comme un Long.

Voir aussi