Remarque
L’accès à cette page requiert une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page requiert une autorisation. Vous pouvez essayer de modifier des répertoires.
Les types numériques à virgule flottante représentent des nombres réels. Tous les types numériques à virgule flottante sont des types valeur. Ils sont également des types simples et vous pouvez les initialiser à l’aide de littéraux. Tous les types numériques à virgule flottante prennent en charge les opérateurs arithmétiques, de comparaison et d’égalité .
Le langage C# documente la version la plus récente de la langue C#. Il contient également la documentation initiale des fonctionnalités dans les préversions publiques pour la prochaine version du langage.
La documentation identifie toute fonctionnalité introduite en premier dans les trois dernières versions de la langue ou dans les préversions publiques actuelles.
Conseil / Astuce
Pour savoir quand une fonctionnalité a été introduite en C#, consultez l’article sur l’historique des versions du langage C#.
Caractéristiques des types à virgule flottante
C# prend en charge les types à virgule flottante prédéfinis suivants :
| Type de données ou mot clé C# | Plage approximative | Précision | Taille | Type .NET |
|---|---|---|---|---|
float |
±1,5 x 10−45 à ±3,4 x 1038 | ~6 à 9 chiffres | 4 octets | System.Single |
double |
±5.0 × 10−324 à ±1.7 × 10308 | ~15 à 17 chiffres | 8 octets | System.Double |
decimal |
±1.0 x 10-28 à ±7.9228 x 1028 | 28 à 29 chiffres | 16 octets | System.Decimal |
Dans le tableau précédent, chaque mot clé de type C# de la colonne la plus à gauche est un alias pour le type .NET correspondant. Ils sont interchangeables. Par exemple, les déclarations suivantes déclarent des variables du même type :
double a = 12.3;
System.Double b = 12.3;
La valeur par défaut de chaque type à virgule flottante est zéro. 0 Chacun des types à virgule flottante a les MinValue constantes et MaxValue les constantes qui fournissent la valeur finie minimale et maximale de ce type. Les float types et double les types fournissent également des constantes qui ne représentent pas des valeurs de nombre et d’infini. Par exemple, le double type fournit les constantes suivantes : Double.NaN, , Double.NegativeInfinityet Double.PositiveInfinity.
Le decimal type est approprié lorsque le degré de précision requis est déterminé par le nombre de chiffres à droite de la virgule décimale. Ces nombres sont couramment utilisés dans les applications financières, pour les montants monétaires (par exemple, 1,00 $), les taux d’intérêt (par exemple, 2,625%), etc. Même les nombres qui sont précis à un seul chiffre décimal sont gérés plus précisément par le decimal type : 0.1, par exemple, peuvent être représentés exactement par une decimal instance, alors qu’il n’y a pas double ou float instance qui représente exactement 0.1. En raison de cette différence dans les types numériques, des erreurs d’arrondi inattendues peuvent se produire dans des calculs arithmétiques lorsque vous utilisez double ou float pour des données décimales. Vous pouvez utiliser double plutôt decimal que lorsque vous optimisez les performances est plus important que de garantir la précision. Toutefois, toute différence de performances passe inaperçue par toutes les applications les plus gourmandes en calculs. Une autre raison possible d’éviter decimal est de réduire les exigences de stockage. Par exemple, ML.NET utilise float , car la différence entre 4 octets et 16 octets s’ajoute pour les jeux de données très volumineux. Pour plus d’informations, consultez System.Decimal.
Vous pouvez combiner des types intégraux et des float types double dans une expression. Dans ce cas, les types intégraux sont implicitement convertis en un des types à virgule flottante et, si nécessaire, le float type est implicitement converti en double. L’expression est évaluée comme suit :
- S’il existe un
doubletype dans l’expression, l’expression prenddoublela valeur , ou dansboolles comparaisons relationnelles et d’égalité. - S’il n’existe aucun
doubletype dans l’expression, l’expression prendfloatla valeur , ou dansboolles comparaisons relationnelles et d’égalité.
Vous pouvez également combiner des types intégraux et le decimal type dans une expression. Dans ce cas, les types intégraux sont implicitement convertis decimalen decimal type et l’expression prend la valeur , ou dans bool les comparaisons relationnelles et d’égalité.
Vous ne pouvez pas combiner le decimal type avec les float types double d’une expression. Dans ce cas, si vous souhaitez effectuer des opérations arithmétiques, de comparaison ou d’égalité, vous devez convertir explicitement les opérandes de ou vers le decimal type, comme l’illustre l’exemple suivant :
double a = 1.0;
decimal b = 2.1m;
Console.WriteLine(a + (double)b);
Console.WriteLine((decimal)a + b);
Vous pouvez utiliser des chaînes de format numérique standard ou des chaînes de format numérique personnalisées pour mettre en forme une valeur à virgule flottante.
Littéraux réels
Le suffixe sur un littéral réel détermine son type :
- Un littéral sans suffixe ou avec le
dsuffixeDest undouble. - Un littéral avec le
fsuffixe ouFest unfloat. - Un littéral avec le
msuffixe ouMest undecimal.
Le code suivant montre un exemple de chaque type :
double d = 3D;
d = 4d;
d = 3.934_001;
float f = 3_000.5F;
f = 5.4f;
decimal myMoney = 3_000.5m;
myMoney = 400.75M;
L'exemple précédent montre également l'utilisation de _ en tant que ségrégateur de chiffres. Vous pouvez utiliser le séparateur de chiffres avec tous les types de littéraux numériques.
Vous pouvez également utiliser la notation scientifique, qui spécifie une partie exposante d’un littéral réel, comme l’illustre l’exemple suivant :
double d = 0.42e2;
Console.WriteLine(d); // output 42
float f = 134.45E-2f;
Console.WriteLine(f); // output: 1.3445
decimal m = 1.5E6m;
Console.WriteLine(m); // output: 1500000
Transformations
Il n’existe qu’une seule conversion implicite entre les types numériques à virgule flottante : de float à double. Toutefois, vous pouvez convertir n’importe quel type à virgule flottante en n’importe quel autre type à virgule flottante à l’aide du cast explicite. Pour plus d’informations, consultez conversions numériques intégrées.
Spécification du langage C#
Pour plus d’informations, consultez les sections suivantes de la spécification du langage C# :