Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite 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 peuvent être initialisés avec des littéraux. Tous les types numériques à virgule flottante prennent en charge les opérateurs arithmétiques, de comparaison et d’égalité .
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
double
un type dans l’expression, l’expression prenddouble
la valeur , ou dansbool
les comparaisons relationnelles et d’égalité. - S’il n’existe aucun
double
type dans l’expression, l’expression prendfloat
la valeur , ou dansbool
les 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 decimal
en 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 type d’un littéral réel est déterminé par son suffixe comme suit :
- Le littéral sans suffixe ou avec le ou
D
led
suffixe est de typedouble
- Le littéral avec le ou
F
lef
suffixe est de typefloat
- Le littéral avec le ou
M
lem
suffixe est de typedecimal
Le code suivant illustre un exemple de chacun d’eux :
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, autrement dit, spécifier 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 tout autre type à virgule flottante avec le 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# :