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 |
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 utilise une instruction qui tente d'ajouter les variables double et decimal :
double x = 9;
Console.WriteLine(d + x); // Error
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
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#)
Concepts
Chaînes de format numériques standard