decimal (référence C#)

Le mot clé decimal indique 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 approprié aux 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

(-7.9 x 1028 à 7.9 x 1028) / (100 à 28)

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 et 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 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 le montre le second exemple ultérieurement dans cet article.Pour plus d'informations sur la méthode String.Format, consultez String.Format.

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.

L'exemple suivant crée une erreur de compilation en essayant d'ajouter double et les variables d' decimal .

double dub = 9;
// The following line causes an error that reads "Operator '+' cannot be applied to 
// operands of type 'double' and 'decimal'"
Console.WriteLine(dec + dub); 

// You can fix the error by using explicit casting of either operand.
Console.WriteLine(dec + (decimal)dub);
Console.WriteLine((double)dec + dub);

Le résultat est l'erreur suivante :

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

public class TestDecimal
{
    static void Main()
    {
        decimal d = 9.1m;
        int y = 3;
        Console.WriteLine(d + y);   // Result converted to decimal
    }
}
// Output: 12.1

Dans cet exemple, le résultat est mis en forme à 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.

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);
    }
}
/* Output:
    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 la Spécification du langage C#. La spécification du langage est la source de référence pour la syntaxe C# et son utilisation.

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

Concepts

Guide de programmation C#

Chaînes de format numériques standard

Autres ressources

Référence C#