Partager via


Decimal, type de données (Visual Basic)

Conserve les valeurs 128 bits (16 octets) qui représentent des entiers relatifs de 96 bits (12 octets) mis à l'échelle par une alimentation variable de 10. Le facteur d'échelle spécifie le nombre de chiffres à droite de la virgule décimale ; il est compris entre 0 et 28. La plus grande valeur possible avec une échelle 0 (aucune décimale) est +/-79 228 162 514 264 337 593 543 950 335 (+/-7,9228162514264337593543950335E+28). Avec 28 décimales, la plus grande valeur est +/-7,9228162514264337593543950335, et la plus petite valeur différente de zéro 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. Ce type de données est particulièrement adapté aux calculs (par exemple, financiers) qui exigent 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, avec un bit de signe et un facteur d'échelle d'entier qui spécifie quelle partie de la valeur est une fraction décimale. C'est pourquoi les nombres Decimal ont une représentation plus précise dans la mémoire que les types à virgule flottante (Single et Double).

  • Performances. Le type de données Decimal est le plus lent de tous les types numériques. Vous devez peser 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 des données de type Decimal en données de l'un ou l'autre de ces types sans rencontrer d'erreur OverflowException.

  • Zéros de fin. Visual Basic ne stocke pas de zéros de fin dans un littéral Decimal. Toutefois, une variable Decimal conserve tous les zéros de fin obtenus par le 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 de littéral D à un littéral force ce dernier en un type de données Decimal. L'ajout du caractère de type d'identificateur @ à un identificateur force ce dernier en un type Decimal.

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

Plage

Il est parfois nécessaire d'utiliser le caractère de type D pour assigner une grande valeur à une variable ou à une constante Decimal. Cette spécification est que le compilateur interprète comme un littéral Long à moins qu'un caractère de type de littéral suive 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 de bigDec1 ne produit pas un dépassement car la valeur qui lui est assignée fait partie de la marge pour Long. La valeur d' Long peut être assignée à la variable d' Decimal .

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

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

Voir aussi

Référence

Liste des types de données (Visual Basic)

Decimal

Decimal.#ctor

Single, type de données (Visual Basic)

Double, type de données (Visual Basic)

Fonctions de conversion de types de données (Visual Basic)

Liste des conversions (Visual Basic)

Math.Round

Concepts

Utilisation efficace des types de données (Visual Basic)