decimal (Référence C#)

Le mot clé decimal désigne un type de données 128 bits. Par rapport aux types virgule flottante, le type decimal fournit une plus grande précision et une plage de valeurs plus réduite ; il est donc particulièrement indiqué pour les calculs financiers et monétaires. Le tableau suivant indique la plage de valeurs approximative et la précision fournies par le type decimal.

Type Plage approximative Précision Type .NET Framework

decimal

±1.0 × 10−28 à ±7.9 × 1028

28-29 chiffres significatifs

System.Decimal

Littéraux

Si vous souhaitez qu'un littéral numérique réel soit considéré comme une valeur de type decimal, utilisez le suffixe m ou M, comme indiqué ci-après :

        decimal myMoney = 300.5m;

Si le suffixe m n'est pas spécifié, le nombre est considéré comme une valeur de type double, ce qui génère une erreur de compilation.

Conversions

Les types intégraux sont convertis implicitement en type decimal et ont pour résultat une valeur de type decimal. Par conséquent, vous pouvez initialiser une variable de type decimal avec un littéral entier, sans utiliser de suffixe, par exemple :

        decimal myMoney = 300;

Étant donné qu'il n'y a pas de conversion implicite entre les types virgule flottante et le type decimal, un cast doit être utilisé pour convertir ces types. Par exemple :

        decimal myMoney = 99.9m;
double x = (double)myMoney;
myMoney = (decimal)x;

Vous pouvez aussi combiner, au sein d'une expression, des types decimal et des types numériques intégraux. En revanche, si vous combinez le type decimal avec des types virgule flottante sans spécifier de conversion explicite, une erreur de compilation se produit.

Pour plus d'informations sur les conversions numériques implicites, consultez Tableau des conversions numériques implicites (Référence C#).

Pour plus d'informations sur les conversions numériques explicites, consultez Tableau des conversions numériques explicites (Référence C#).

Application d'un format à un résultat de type decimal

Vous pouvez appliquer un format au résultat à l'aide de la méthode String.Format, ou de la méthode System.Console.Write, qui appelle String.Format(). Le format monétaire est spécifié à l'aide du format de chaîne monétaire standard "C" ou "c", comme illustré dans l'exemple 2. Pour plus d'informations sur la méthode String.Format, consultez System.String.Format(System.String,System.Object).

Exemple

Dans cet exemple, un decimal et un int sont mélangés dans la même expression. Le résultat est de type decimal.

Si vous essayez d'ajouter des variables double et decimal à l'aide d'une instruction comme suit :

double x = 9;
Console.WriteLine(d + x); // Error

vous obtiendrez le message d'erreur suivant :

Operator '+' cannot be applied to operands of type 'double' and 'decimal'

// keyword_decimal.cs
// decimal conversion
using System;
public class TestDecimal 
{
    static void Main () 
    {
        decimal d = 9.1m;
        int y = 3;
        Console.WriteLine(d + y);   // Result converted to decimal
    }
}

Sortie

 
12.1

Dans cet exemple, le résultat reçoit un format à l'aide de la chaîne de format monétaire. Notez que la valeur x est arrondie, car le nombre de décimales excède $0.99. La variable y, représentant le nombre maximal exact de chiffres, est affichée dans le format correct.

// keyword_decimal2.cs
// Decimal type formatting
using System;
public class TestDecimalFormat 
{
    static void Main () 
    {
        decimal x = 0.999m;
        decimal y = 9999999999999999999999999999m;
        Console.WriteLine("My amount = {0:C}", x);
        Console.WriteLine("Your amount = {0:C}", y);
    }
}

Sortie

 
My amount = $1.00
Your amount = $9,999,999,999,999,999,999,999,999,999.00

Spécification du langage C#

Pour plus d'informations, consultez les sections suivantes dans Spécifications du langage C#.

  • 1.3 Types et variables

  • 4.1.7 Type décimal

Voir aussi

Référence

Mots clés C#
Tableau des types intégraux (Référence C#)
Tableau des types intégrés (Référence C#)
Tableau des conversions numériques implicites (Référence C#)
Tableau des conversions numériques explicites (Référence C#)
Decimal Structure

Concepts

Guide de programmation C#

Autres ressources

Référence C#