Partager via


Types numériques à virgule flottante (référence C#)

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 prend doublela valeur , ou dans bool les comparaisons relationnelles et d’égalité.
  • S’il n’existe aucun double type dans l’expression, l’expression prend floatla valeur , ou dans bool 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 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 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 le d suffixe est de typedouble
  • Le littéral avec le ou F le f suffixe est de typefloat
  • Le littéral avec le ou M le m 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# :

Voir aussi