Formatarea numerelor și string.Format în C# (.NET)

Șiruri de caractere (String) .NET Framework 1.0

Specificatori de format (N2, F1, D5, X) și aliniere în string.Format, ToString și șiruri interpolate, cu cultura ro-RO.

Sintaxă C#
string.Format("{0,-10}{1,8:N2}", nume, pret)   pret.ToString("N2", cultura)   $"{n:D5}"

Ce face Formatarea numerelor și string.Format

Același format funcționează în trei locuri: valoare.ToString("N2"), string.Format("{0:N2}", valoare) și $"{valoare:N2}". Specificatorii uzuali: N (cu separator de mii), F (zecimale fixe), D (întregi completați cu zerouri), X (hexazecimal), E (exponențial), urmați de numărul de cifre. Formatele personalizate folosesc 0 și #: "0.00", "#,##0".

După virgulă, în acolade, vine alinierea: {0,8} aliniază la dreapta pe 8 caractere, {0,-8} la stânga. Așa se fac tabele simple în consolă.

Separatorul zecimal și cel de mii vin din cultura curentă: în ro-RO 1234,5 se scrie 1.234,50, în cultura invariantă 1,234.50. Pentru fișiere și API-uri folosește CultureInfo.InvariantCulture; pentru afișare către utilizator, cultura lui.

Parametri

Parametru Descriere
N2 Număr cu separator de mii și 2 zecimale.
F1 Număr cu exact o zecimală, fără separator de mii.
D5 Întreg pe cel puțin 5 cifre, completat cu zerouri.
X / x Hexazecimal cu litere mari / mici.
{0,-8} Aliniere la stânga pe 8 caractere; fără minus, la dreapta.

Exemple

Exemplul 1: Specificatori de format în cultura ro-RO

using System.Globalization;

CultureInfo.CurrentCulture = new CultureInfo("ro-RO");
decimal pret = 1234.5m;

Console.WriteLine(pret.ToString("N2"));
Console.WriteLine($"{pret:F1}");
Console.WriteLine($"{42:D5}");
Console.WriteLine($"{255:X}");
Console.WriteLine(string.Format("{0} are {1:N0} lei", "Ana", 15000));
Console.WriteLine(pret.ToString("N2", CultureInfo.InvariantCulture));

Rezultat

1.234,50
1234,5
00042
FF
Ana are 15.000 lei
1,234.50

Exemplul 2: Tabel aliniat în consolă

var produse = new[] { ("Pâine", 5), ("Lapte", 8), ("Cafea", 32) };

Console.WriteLine($"{"Produs",-8}|{"Preț",6}");
foreach (var (nume, pret) in produse)
    Console.WriteLine($"{nume,-8}|{pret,6}");
Console.WriteLine(string.Format("{0,-8}|{1,6:D3}", "Total", 45));

Rezultat

Produs  |  Preț
Pâine   |     5
Lapte   |     8
Cafea   |    32
Total   |   045

Greșeli frecvente

  • Același program afișează 1,234.50 pe un server și 1.234,50 pe altul, pentru că cultura diferă. Dă cultura explicit acolo unde formatul contează.
  • {0:D2} pe un decimal sau double aruncă FormatException: D este doar pentru întregi.
  • Acoladele literale în string.Format se dublează: {{ și }}.

Comenzi înrudite

  • int.Parse și int.TryParse: Transformă text în număr: Parse aruncă excepție la text invalid, TryParse returnează false și nu aruncă.
  • Math (Round, Pow, Sqrt, Clamp): Clasa statică Math: rotunjire, putere, radical, valoare absolută, minim/maxim și limitarea unei valori într-un interval.
  • DateTime: Reprezintă o dată cu oră: creare, adunare de zile și luni, diferențe, formatare și citire din text cu ParseExact.