Chaînes de format numérique

Dans la section précédente, nous avons vu les espaces réservés de chaîne et découvert deux manières de les utiliser. Au-delà de ces deux méthodes, C# propose des règles de mise en forme beaucoup plus élaborées.

Syntaxe de base des espaces réservés de format

{index,alignement:format}
1. index

Indice / variable interpolée, champ obligatoire

Espaces réservés numériques classiques : Console.WriteLine(« {0} », 123); insère la valeur 123 à l’emplacement {0}

Interpolation de chaîne avec $"" : écrivez directement le nom de la variable sans indice numérique, exemple Console.WriteLine($ »Tom is {age} years old »)

Exemple de code

int money = 1000;
Console.WriteLine("Valeur brute : {0}", money);
Console.WriteLine("Format monétaire : {0:C}", money);
Console.WriteLine("Monétaire aligné à droite sur 10 caractères : |{0,10:C}|", money);Langage du code : JavaScript (javascript)
Valeur brute : 1000
Format monétaire : $1,000.00
Monétaire aligné à droite sur 10 caractères : | $1,000.00|

Équivalent avec l’interpolation

int money = 500;
Console.WriteLine($"Valeur brute : {money}");
Console.WriteLine($"Format monétaire : {money:C}");
Console.WriteLine($"Monétaire aligné à droite sur 10 caractères : |{money,10:C}|");Langage du code : JavaScript (javascript)
2. alignment (alignement)

Spécificateur d’alignement, optionnel, séparé par une virgule ,

Rôle : définir la largeur minimale de sortie et l’alignement horizontal du contenu

Exemple : Console.WriteLine(« {0,10} », 123); // occupe 10 caractères, le nombre est aligné à droite

On voit de nombreux espaces vides à gauche de 123. Le chiffre 10 correspond à une largeur totale de dix caractères ; sept espaces sont ajoutés avant 123 pour obtenir un alignement à droite.

Entier positif : alignement à droite, complétion par des espaces à gauche si la largeur est insuffisante Exemple : {0,10} → largeur de 10 caractères, nombre à droite

Entier négatif : alignement à gauche, complétion par des espaces à droite si la largeur est insuffisante Exemple : {0,-10} → largeur de 10 caractères, nombre à gauche

Modifions le code comme ceci

Console.WriteLine("{0,-10}", 123);  // largeur de 10 caractères, valeur négative donc aligné à gaucheLangage du code : JavaScript (javascript)

Les espaces blancs sont difficiles à distinguer visuellement, nous ajoutons des barres verticales pour les différencier

Console.WriteLine("|{0,-10}|", 123);
Console.WriteLine("|{0,10}|", 456);Langage du code : JavaScript (javascript)

Avec les délimiteurs verticaux, le comportement est clair : 10 fixe une largeur de dix caractères, les nombres négatifs alignent à gauche, les positifs à droite et les emplacements vides sont remplis d’espaces.

L’écriture équivalente avec interpolation est ci-dessous

int one = 123;
int two = 456;
Console.WriteLine($"|{one,-10}|");
Console.WriteLine($"|{two,-10}|");Langage du code : JavaScript (javascript)
3. format

Champ de format, optionnel, séparé par deux-points :

Contrôle l’affichage des nombres : devise, décimales fixes, notation scientifique, hexadécimal, etc.

Structure du champ de format :Axx

  • : doit être collé directement à l’espace réservé sans espace
  • A : spécificateur à une lettre (9 formats standard intégrés, certains sensibles à la casse)
  • xx : spécificateur de précision (optionnel, 1 à 2 chiffres, sa signification varie selon le format)
// F4 : format à décimales fixes, 4 chiffres après la virgule
Console.WriteLine("{0:F4}", 12.345678);

// Équivalent avec interpolation
Console.WriteLine($"{12.345678:F4}");Langage du code : JavaScript (javascript)

Voyons d’autres exemples

double myDouble = 12.345678;
Console.WriteLine("{0,-10:G} -- Général", myDouble);      // 12.345678 -- Général
Console.WriteLine("{0,-10} -- Défaut", myDouble);         // 12.345678 -- Défaut
Console.WriteLine("{0,-10:F4} -- Décimales fixes", myDouble);   // 12.3457  -- Décimales fixes
Console.WriteLine("{0,-10:C} -- Monétaire", myDouble);     // $12.35    -- Monétaire
Console.WriteLine("{0,-10:E3} -- Notation scientifique", myDouble);//1.235E+001 -- Notation scientifique
Console.WriteLine("{0,-10:x} -- Entier hexadécimal", 1194719);   // 123adf    -- Entier hexadécimalLangage du code : JavaScript (javascript)

Tableau des 9 spécificateurs de format numérique standard

IdentifiantNomFonctionSens de la précisionExemple de rendu
C/cCurrency DeviseAffiche le symbole monétaire localiséNombre de décimales{0:C} 12,5 → $12.50
D/dDecimal Entier décimalRéservé au type int, complète avec des zéros à gaucheNombre minimal de chiffres{0:D4} 12 → 0012
F/fFixed-point Décimales fixesNombre constant de chiffres après la virguleNombre de décimales conservées{0:F4} 12,345678 →12.3457
G/gGeneral Format généralChoisit automatiquement décimales fixes ou notation scientifique, format par défautNombre de chiffres significatifs{0:G4} 12,345678 →12.35
X/xHexadecimal Hexadécimal (sensible à la casse)Affiche en base 16, X majuscule, x minusculeNombre minimal de chiffres{0:x} 180026 → 2bf3a
N/nNumber Nombre avec séparateursSéparateur des milliers tous les trois chiffresNombre de décimales{0:N2} 12345678,54321 →12,345,678.54
P/pPercent PourcentageValeur ×100 suivie du symbole %Nombre de décimales{0:P2} 0,1221897 →12,22 %
R/rRound-trip Format aller-retourConserve toute la précision pour reconvertir le nombre initialPrécision ignorée{0:R} 1234,21897 →1234.21897
E/eScientific Notation scientifique (sensible à la casse)Écriture exponentielle, E majuscule, e minusculeNombre de décimales de la mantisse{0:e4}12,3456789 →1.2346e+001

Chaînes de format numérique

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *