Chaînes de format numériques personnalisées

Mise à jour : Juillet 2008

Une chaîne de format numérique personnalisée, que vous créez et qui est composée d'un ou de plusieurs spécificateurs de format numériques personnalisés, définit la mise en forme des données numériques. Une chaîne de format numérique personnalisée peut également être définie comme toute chaîne autre qu'une chaîne de format numérique standard.

Le tableau suivant décrit les spécificateurs de format numériques personnalisés. Pour plus d'informations, consultez les notes qui suivent le tableau.

Spécificateur de format

Nom

Description

0

Espace réservé du zéro

Si la valeur mise en forme possède un chiffre à l'emplacement où « 0 » apparaît dans la chaîne de format, ce chiffre est copié dans la chaîne résultante ; sinon, un « 0 » apparaît dans la chaîne résultante. L'emplacement du « 0 » situé à l'extrême gauche avant la virgule décimale et du « 0 » situé à l'extrême droite après la virgule décimale détermine la plage des chiffres qui sont toujours présents dans la chaîne résultante.

Le spécificateur « 00 » provoque l'arrondissement de la valeur au chiffre le plus proche précédant la virgule ; l'arrondissement à une valeur différente de zéro est toujours utilisé. Par exemple, la mise en forme de 34,5 avec « 00 » produit la valeur 35.

L'exemple suivant affiche plusieurs valeurs mises en forme à l'aide de chaînes de format personnalisées qui incluent des espaces réservés du zéro.

Dim value As Double
value = 123
Console.WriteLine(value.ToString("00000"))
' Displays 00123
value = 1.2
Console.Writeline(value.ToString("0.00", CultureInfo.InvariantCulture))
' Displays 1.20
Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture))
' Displays 01.20
Console.WriteLine(value.ToString("00.00", _
CultureInfo.CreateSpecificCulture("da-DK")))
' Displays 01,20
value = .56
Console.WriteLine(value.ToString("0.0", CultureInfo.InvariantCulture))
' Displays 0.6
value = 1234567890
Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture))
' Displays 1,234,567,890
Console.WriteLine(value.ToString("#,#", _
CultureInfo.CreateSpecificCulture("el-GR")))
' Displays 1.234.567.890
double value;
value = 123;
Console.WriteLine(value.ToString("00000"));
// Displays 00123
value = 1.2;
Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture));
// Displays 1.20
Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture));
// Displays 01.20
Console.WriteLine(value.ToString("00.00",
CultureInfo.CreateSpecificCulture("da-DK")));
// Displays 01,20
value = .56;
Console.WriteLine(value.ToString("0.0", CultureInfo.InvariantCulture));
// Displays 0.6
value = 1234567890;
Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture));
// Displays 1,234,567,890
Console.WriteLine(value.ToString("#,#",
CultureInfo.CreateSpecificCulture("el-GR")));
// Displays 1.234.567.890

#

Espace réservé de chiffre

Si la valeur mise en forme possède un chiffre à l'emplacement où « # » apparaît dans la chaîne de format, ce chiffre est copié dans la chaîne résultante. Sinon, rien n'est stocké à cet emplacement dans la chaîne résultante.

Remarquez que ce spécificateur n'affiche jamais le caractère « 0 » s'il ne s'agit pas d'un chiffre significatif, même si « 0 » est le seul chiffre de la chaîne. Il affiche le caractère « 0 » s'il s'agit d'un chiffre significatif dans le nombre qui apparaît.

La chaîne de format « ## » provoque l'arrondissement de la valeur au chiffre le plus proche précédant la virgule ; l'arrondissement à une valeur différente de zéro est toujours utilisé. Par exemple, la mise en forme de 34,5 avec « ## » produit la valeur 35.

L'exemple suivant affiche plusieurs valeurs mises en forme à l'aide de chaînes de format personnalisées qui incluent des espaces réservés aux chiffres.

Dim value As Double
value = 1.2
Console.WriteLine(value.ToString("#.##", CultureInfo.InvariantCulture))
' Displays 1.2
value = 123
Console.WriteLine(value.ToString("#####"))
' Displays 123
value = 123456
Console.WriteLine(value.ToString("[##-##-##]"))
' Displays [12-34-56]
value = 1234567890
Console.WriteLine(value.ToString("#"))
' Displays 1234567890
Console.WriteLine(value.ToString("(###) ###-####"))
' Displays (123) 456-7890
double value;
value = 1.2;
Console.WriteLine(value.ToString("#.##", CultureInfo.InvariantCulture));
// Displays 1.2
value = 123;
Console.WriteLine(value.ToString("#####"));
// Displays 123
value = 123456;
Console.WriteLine(value.ToString("[##-##-##]"));
// Displays [12-34-56]
value = 1234567890;
Console.WriteLine(value.ToString("#"));
// Displays 1234567890
Console.WriteLine(value.ToString("(###) ###-####"));
// Displays (123) 456-7890

.

Virgule décimale

Le premier caractère « , » de la chaîne de format détermine l'emplacement du séparateur décimal dans la valeur mise en forme. Tout caractère « , » supplémentaire est ignoré.

Le caractère réellement utilisé comme séparateur décimal dans la chaîne résultante est déterminé par la propriété NumberDecimalSeparator de l'objet NumberFormatInfo qui contrôle la mise en forme.

L'exemple suivant utilise le spécificateur de format de virgule décimale pour définir l'emplacement de la virgule décimale dans plusieurs chaînes résultantes.

Dim value As Double
value = 1.2
Console.Writeline(value.ToString("0.00", CultureInfo.InvariantCulture))
' Displays 1.20
Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture))
' Displays 01.20
Console.WriteLine(value.ToString("00.00", _
CultureInfo.CreateSpecificCulture("da-DK")))
' Displays 01,20
value = .086
Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture))
' Displays 8.6%
value = 86000
Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture))
' Displays 8.6E+4
double value;
value = 1.2;
Console.WriteLine(value.ToString("0.00", CultureInfo.InvariantCulture));
// Displays 1.20
Console.WriteLine(value.ToString("00.00", CultureInfo.InvariantCulture));
// Displays 01.20
Console.WriteLine(value.ToString("00.00",
CultureInfo.CreateSpecificCulture("da-DK")));
// Displays 01,20
value = .086;
Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture));
// Displays 8.6%
value = 86000;
Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture));
// Displays 8.6E+4

,

Séparateur des milliers et mise à l'échelle des nombres

Le caractère « , » sert aussi bien de spécificateur de séparateur de milliers que de spécificateur de mise à l'échelle des nombres.

Spécificateur de séparateur de milliers : si un ou plusieurs caractères « , » sont spécifiés entre deux espaces réservés aux chiffres (0 ou #) qui mettent en forme les chiffres intégraux d'un nombre, un caractère de séparation des groupes est inséré entre chaque groupe de nombres dans la partie intégrale de la sortie.

Les propriétés NumberGroupSeparator et NumberGroupSizes de l'objet NumberFormatInfo en cours déterminent le caractère utilisé comme séparateur de groupes de nombres et la taille de chaque groupe de nombres. Par exemple, si la chaîne « #,# » et la culture indifférente sont utilisées pour mettre en forme le nombre 1000, la sortie est « 1,000 ».

Spécificateur de mise à l'échelle des nombres : si un ou plusieurs caractères « , » sont spécifiés immédiatement à gauche de la virgule décimale explicite ou implicite, le nombre à mettre en forme est divisé par 1000 chaque fois qu'un spécificateur de mise à l'échelle des nombres se présente. Par exemple, si la chaîne « 0,, » est utilisée pour mettre en forme le nombre 100 millions, la sortie est « 100 ».

Vous pouvez utiliser des spécificateurs de séparateur de milliers et de mise à l'échelle des nombres dans la même chaîne de format. Par exemple, si la chaîne « #,0,, » et la culture indifférente sont utilisées pour mettre en forme le nombre 1 milliard, la sortie est « 1,000 ».

L'exemple suivant illustre l'utilisation de la virgule comme séparateur de milliers.

Dim value As Double = 1234567890
Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture))
' Displays 1,234,567,890
Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture))
' Displays 1,235
double value = 1234567890;
Console.WriteLine(value.ToString("#,#", CultureInfo.InvariantCulture));
// Displays 1,234,567,890
Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture));
// Displays 1,235

L'exemple suivant illustre l'utilisation de la virgule comme spécificateur pour la mise à l'échelle des nombres.

Dim value As Double = 1234567890
Console.WriteLine(value.ToString("#,,", CultureInfo.InvariantCulture))
' Displays 1235
Console.WriteLine(value.ToString("#,,,", CultureInfo.InvariantCulture))
' Displays 1
Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture))
' Displays 1,235
double value = 1234567890;
Console.WriteLine(value.ToString("#,,", CultureInfo.InvariantCulture));
// Displays 1235
Console.WriteLine(value.ToString("#,,,", CultureInfo.InvariantCulture));
// Displays 1
Console.WriteLine(value.ToString("#,##0,,", CultureInfo.InvariantCulture));
// Displays 1,235

%

Espace réservé de pourcentage

La présence d'un caractère « % » dans une chaîne de format entraîne la multiplication d'un nombre par 100 avant sa mise en forme. Le symbole approprié est inséré dans le nombre proprement dit, à l'endroit où le caractère « % » apparaît dans la chaîne de format. Le caractère pour cent dépend de la classe NumberFormatInfo en cours.

L'exemple suivant définit plusieurs chaînes de format personnalisées qui incluent l'espace réservé de pourcentage.

Dim value As Double = .086
Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture))
' Displays 8.6%
double value = .086;
Console.WriteLine(value.ToString("#0.##%", CultureInfo.InvariantCulture));
// Displays 8.6%

Espace réservé « pour mille »

La présence d'un caractère « ‰ » (\u2030) dans une chaîne de format entraîne la multiplication d'un nombre par 1 000 avant sa mise en forme. Le symbole « pour mille » approprié est inséré dans la chaîne retournée, à l'emplacement où le symbole « ‰ » apparaît dans la chaîne de format. Le caractère « pour mille » utilisé est défini par la propriété NumberFormatInfo.PerMilleSymbol de l'objet qui fournit les informations de mise en forme spécifique à la culture.

L'exemple suivant définit une chaîne de format personnalisée qui inclut l'espace réservé « pour mille ».

Dim value As Double = .00354
Dim perMilleFmt As String = "#0.## " & ChrW(&h2030)
Console.WriteLine(value.ToString(perMilleFmt, CultureInfo.InvariantCulture))
' Displays 3.54 ‰
double value = .00354;
string perMilleFmt = "#0.## " + '\u2030';
Console.WriteLine(value.ToString(perMilleFmt, CultureInfo.InvariantCulture));
// Displays 3.54‰

E0

E+0

E-0

e0

e+0

e-0

Notation scientifique

Si une des chaînes « E », « E+ », « E- », « e », « e+ » ou « e- » est présente dans la chaîne de format et immédiatement suivie d'au moins un caractère « 0 », le nombre est mis en forme à l'aide de la notation scientifique, avec un « E » ou « e » inséré entre le nombre et l'exposant. Le nombre de caractères « 0 » qui suivent l'indicateur de notation scientifique détermine le nombre minimal de chiffres à afficher pour l'exposant. Les formats « E+ » et « e+ » indiquent qu'un signe (plus ou moins) doit toujours précéder l'exposant. Les formats « E », « E- », « e » et « e- » indiquent qu'un signe ne doit précéder que les exposants négatifs.

L'exemple suivant met en forme plusieurs valeurs numériques à l'aide des spécificateurs pour la notation scientifique.

Dim value As Double = 86000
Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture))
' Displays 8.6E+4
Console.WriteLine(value.ToString("0.###E+000", CultureInfo.InvariantCulture))
' Displays 8.6E+004
Console.WriteLine(value.ToString("0.###E-000", CultureInfo.InvariantCulture))
' Displays 8.6E004
double value = 86000;
Console.WriteLine(value.ToString("0.###E+0", CultureInfo.InvariantCulture));
// Displays 8.6E+4
Console.WriteLine(value.ToString("0.###E+000", CultureInfo.InvariantCulture));
// Displays 8.6E+004
Console.WriteLine(value.ToString("0.###E-000", CultureInfo.InvariantCulture));
// Displays 8.6E004

\

Caractère d'échappement

En C# et C++, la barre oblique inverse entraîne l'interprétation du caractère suivant de la chaîne de format comme une séquence d'échappement. Elle est utilisée dans les séquences de mise en forme traditionnelles, telles que « \n » (nouvelle ligne).

Dans certains langages, le caractère d'échappement proprement dit doit être précédé d'un caractère d'échappement s'il est utilisé comme caractère littéral. Sinon, le compilateur interprète le caractère comme une séquence d'échappement. Utilisez la chaîne « \\ » pour afficher « \ ».

Remarquez que ce caractère d'échappement n'est pas pris en charge dans Visual Basic. Cependant, ControlChars fournit les mêmes fonctionnalités.

'ABC'

"ABC"

Chaîne littérale

Les caractères compris entre des guillemets simples ou doubles sont copiés dans la chaîne résultante et n'affectent pas la mise en forme.

;

Séparateur de section

Le caractère « ; » est utilisé pour séparer les sections pour les nombres positifs, négatifs et les zéros dans la chaîne de format. Si la chaîne de format personnalisée comprend deux sections, la section la plus à gauche définit la mise en forme des nombres positifs et nuls, alors que la section la plus à droite définit la mise en forme des nombres négatifs. Si elle comprend trois sections, la section la plus à gauche, la section centrale et la section la plus à droite définissent respectivement la mise en forme des nombres positifs, des nombres négatifs et des nombres nuls.

L'exemple suivant utilise le spécificateur de format pour le séparateur de section afin de mettre en forme différemment les nombres positifs, négatifs et nuls.

Dim posValue As Double = 1234
Dim negValue As Double = -1234
Dim fmt As String = "##;(##)"
Console.WriteLine(posValue.ToString(fmt)) ' Displays 1234
Console.WriteLine(negValue.ToString(fmt)) ' Displays (1234)
double posValue = 1234;
double negValue = -1234;
string fmt = "##;(##)";
Console.WriteLine(posValue.ToString(fmt)); // Displays 1234
Console.WriteLine(negValue.ToString(fmt)); // Displays (1234)

Autres

Tous les autres caractères

Tout autre caractère est copié dans la chaîne résultante et n'affecte pas la mise en forme.

Remarques

Infinis à virgule flottante et NaN

Notez que quelle que soit la chaîne de format, si la valeur d'un type à virgule flottante Single ou Double est l'infini positif, l'infini négatif ou une valeur non numérique (NaN), la chaîne mise en forme est la valeur de la propriété PositiveInfinitySymbol, NegativeInfinitySymbol ou NaNSymbol spécifiée par l'objet NumberFormatInfo actuellement applicable.

Paramètres du panneau de configuration

Les paramètres de l'élément Options régionales et linguistiques du Panneau de configuration influencent la chaîne résultante produite par une opération de mise en forme. Ces paramètres sont utilisés pour initialiser l'objet NumberFormatInfo associé à la culture du thread en cours et la culture du thread en cours fournit des valeurs utilisées pour indiquer la mise en forme. Les ordinateurs utilisant des paramètres différents génèrent des chaînes résultantes différentes.

Arrondi et chaînes de format à virgule fixe

Notez que, pour les chaînes de format à virgule fixe (c'est-à-dire les chaînes de format ne contenant pas de caractères de format de notation scientifique), les nombres sont arrondis au même nombre de décimales que d'espaces réservés aux chiffres à droite de la virgule décimale. Si la chaîne de format ne contient pas de virgule décimale, le nombre est arrondi à l'entier le plus proche. Si le nombre possède plus de chiffres que d'espaces réservés de chiffres à gauche de la virgule décimale, les chiffres supplémentaires sont copiés dans la chaîne résultante immédiatement avant le premier espace réservé de chiffre.

Séparateurs de section et mise en forme conditionnelle

Une autre mise en forme peut être appliquée à une chaîne selon que la valeur est positive, négative ou nulle. Pour entraîner ce comportement, une chaîne de format personnalisée peut contenir jusqu'à trois sections séparées par des points-virgules. Ces sections sont décrites dans le tableau suivant.

Nombre de sections

Description

Une section

La chaîne de format s'applique à toutes les valeurs.

Deux sections

La première section s'applique aux valeurs positives et aux zéros, et la deuxième section s'applique aux valeurs négatives.

Si le nombre à mettre en forme est négatif, mais devient nul après l'arrondissement au format de la deuxième section, le zéro résultant est mis en forme en fonction de la première section.

Trois sections

La première section s'applique aux valeurs positives, la deuxième section s'applique aux valeurs négatives et la troisième section s'applique aux zéros.

La deuxième section peut rester vide (en n'insérant aucune valeur entre les points-virgules), auquel cas la première section s'applique à toutes les valeurs différentes de zéro.

Si le nombre à mettre en forme est différent de zéro, mais devient nul après l'arrondissement au format de la première ou deuxième section, le zéro résultant est mis en forme en fonction de la troisième section.

Les séparateurs de section ignorent toute mise en forme préexistante associée à un nombre lorsque la valeur finale est mise en forme. Par exemple, les valeurs négatives sont toujours affichées sans signe moins lorsque des séparateurs de section sont utilisés. Si vous souhaitez que la valeur mise en forme finale soit précédée d'un signe moins, vous devez inclure ce signe explicitement comme élément du spécificateur de format personnalisé.

Les fragments de code suivants illustrent la manière dont les séparateurs de section peuvent être utilisés pour produire des chaînes mises en forme.

Dim MyPos As Double = 19.95
Dim MyNeg As Double = -19.95
Dim MyZero As Double = 0

' In the U.S. English culture, MyString has the value: $19.95.
Dim MyString As String = MyPos.ToString("$#,##0.00;($#,##0.00);Zero")

' In the U.S. English culture, MyString has the value: ($19.95).
' The minus sign is omitted by default.
MyString = MyNeg.ToString("$#,##0.00;($#,##0.00);Zero")

' In the U.S. English culture, MyString has the value: Zero.
MyString = MyZero.ToString("$#,##0.00;($#,##0.00);Zero")
double MyPos = 19.95, MyNeg = -19.95, MyZero = 0.0;

// In the U.S. English culture, MyString has the value: $19.95.
string MyString = MyPos.ToString("$#,##0.00;($#,##0.00);Zero");

// In the U.S. English culture, MyString has the value: ($19.95).
// The minus sign is omitted by default.
MyString = MyNeg.ToString("$#,##0.00;($#,##0.00);Zero");

// In the U.S. English culture, MyString has the value: Zero.
MyString = MyZero.ToString("$#,##0.00;($#,##0.00);Zero");

Deux exemples de format personnalisé

Les fragments de code suivants illustrent la mise en forme numérique personnalisée. Dans les deux cas, l'espace réservé au chiffre (#) dans la chaîne de format personnalisée affiche les données numériques, et tous les autres caractères sont copiés vers la sortie.

Dim myDouble As Double = 1234567890
Dim myString As String = myDouble.ToString( "(###) ### - ####" )
' The value of myString is "(123) 456 – 7890".

Dim MyInt As Integer = 42
MyString = MyInt.ToString( "My Number = #" )
' In the U.S. English culture, MyString has the value: 
' "My Number = 42".
Double myDouble = 1234567890;
String myString = myDouble.ToString( "(###) ### - ####" );
// The value of myString is "(123) 456 – 7890".

int  MyInt = 42;
MyString = MyInt.ToString( "My Number = #" );
// In the U.S. English culture, MyString has the value: 
// "My Number = 42".

Voir aussi

Concepts

Chaînes de format numériques

Chaînes de format numériques standard

Référence

NumberFormatInfo

Autres ressources

Mise en forme des types

Historique des modifications

Date

Historique

Raison

Juillet 2008

Ajout de l'espace réservé « pour mille ».

Résolution des bogues de contenu.