Précision de l’analyse de format numérique standard

.NET prend désormais en charge des valeurs plus précises pour le formatage des nombres sous forme de chaînes à l’aide de ToString et de TryFormat.

Notes

La précision maximale a été modifiée à nouveau dans .NET 7. Pour plus d’informations, consultez Précision maximale des chaînes de format numérique.

Description de la modification

Lors du formatage de nombres sous forme de chaînes, le spécificateur de précision de la chaîne de format représente le nombre de chiffres de la chaîne résultante. Selon le spécificateur de format (le caractère de début de la chaîne), la précision peut correspondre au nombre total de chiffres, au nombre de chiffres significatifs ou au nombre de chiffres décimaux.

Dans les versions précédentes de .NET, la logique d’analyse de format numérique standard est limitée à une précision de 99 maximum. Certains types numériques présentent une plus grande précision, mais ToString(string format) ne les expose pas correctement. Si vous spécifiez une précision supérieure à 99 (par exemple 32.ToString("C100")), la chaîne de format est interprétée comme une chaîne de format numérique personnalisée au lieu d’une « devise d’une précision de 100 ». Dans les chaînes de format numérique personnalisées, les caractères sont interprétés comme des littéraux de caractères. En outre, une chaîne de format contenant un spécificateur de format non valide est analysée différemment en fonction de la valeur de précision. H99 lève une FormatException pour le spécificateur de format non valide, tandis que H100 est interprété comme une chaîne de format numérique personnalisée.

À compter de .NET 6, .NET prend en charge une précision pouvant aller jusqu’à Int32.MaxValue. Une chaîne de format composée d’un spécificateur de format d’un nombre quelconque de chiffres est interprétée comme une chaîne de format numérique standard avec précision. Une FormatException est levée dans les conditions suivantes, ensemble ou séparément :

Cette modification a été implémentée dans la logique d’analyse qui affecte tous les types numériques.

Le tableau suivant montre les changements de comportement de différentes chaînes de format.

Chaîne de format Comportement précédent Comportement de .NET 6 (et versions ultérieures)
C2 Désigne une devise avec deux chiffres décimaux. Désigne une devise avec deux chiffres décimaux (aucune modification).
C100 Désigne une chaîne de format numérique personnalisée qui imprime « C100 ». Désigne une devise avec 100 chiffres décimaux.
H99 Lève FormatException, car le spécificateur de format standard « H » n’est pas valide. Lève FormatException, car le spécificateur de format standard « H » n’est pas valide (aucune modification).
H100 Désigne une chaîne de format numérique personnalisée. Lève FormatException, car le spécificateur de format standard « H » n’est pas valide.

Version introduite

.NET 6

Raison du changement

Cette modification corrige le comportement inattendu qui se produit lorsqu’une précision plus élevée est utilisée pour l’analyse de format numérique.

Dans la plupart des cas, aucune action n’est nécessaire, et la précision correcte s’affiche dans les chaînes résultantes.

Toutefois, si vous souhaitez revenir au comportement précédent selon lequel le spécificateur de format est interprété comme un caractère littéral lorsque la précision est supérieure à 99, vous pouvez encapsuler ce caractère entre guillemets simples ou l’échapper avec une barre oblique inverse. Par exemple, dans les versions précédentes de .NET, 42.ToString("G999") retourne G999. Pour maintenir ce comportement, remplacez la chaîne de format par "'G'999" ou "\\G999". Cela fonctionnera sur .NET Framework, .NET Core et .NET 5 (et versions ultérieures).

Les chaînes de format suivantes continueront d’être interprétées comme des chaînes de format numérique personnalisées :

  • Commence par n’importe quel caractère non alphabétique ASCII, par exemple $ ou è.
  • Commence par un caractère alphabétique ASCII, non suivi d’un chiffre ASCII, par exemple A$.
  • Commence par un caractère alphabétique ASCII, suivi d’une séquence de chiffres ASCII, puis de n’importe quel caractère autre qu’un chiffre ASCII, par exemple A12A.

API affectées

Cette modification a été implémentée dans la logique d’analyse qui affecte tous les types numériques.

Voir aussi