En la sección anterior estudiamos los marcadores de posición de cadena y aprendimos dos formas de usarlos. De hecho, aparte de estos dos métodos, C# admite reglas de formato más complejas.
Sintaxis básica de los marcadores de formato
{índice,alineación:formato}
1. index (índice)
Índice / variable interpolada, campo obligatorio
Marcadores numéricos tradicionales: Console.WriteLine(«{0}», 123); inserta el valor 123 dentro de {0}
Interpolación de cadenas con $"": escribe directamente el nombre de la variable sin índice numérico, ejemplo Console.WriteLine($»Tom is {age} years old»)
Ejemplo de código
int money = 1000;
Console.WriteLine("Valor original: {0}", money);
Console.WriteLine("Formato moneda: {0:C}", money);
Console.WriteLine("Moneda alineada a la derecha con 10 caracteres: |{0,10:C}|", money);Lenguaje del código: JavaScript (javascript)
Valor original: 1000
Formato moneda: $1,000.00
Moneda alineada a la derecha con 10 caracteres: | $1,000.00|
Versión equivalente con interpolación
int money = 500;
Console.WriteLine($"Valor original: {money}");
Console.WriteLine($"Formato moneda: {money:C}");
Console.WriteLine($"Moneda alineada a la derecha con 10 caracteres: |{money,10:C}|");Lenguaje del código: JavaScript (javascript)
2. alignment (alineación)
Especificador de alineación, opcional, separado por coma ,
Propósito: controlar el ancho mínimo de salida y la alineación horizontal
Ejemplo: Console.WriteLine(«{0,10}», 123); // Ocupa 10 espacios de caracteres, el número se alinea a la derecha

Como se observa, hay muchos espacios vacíos a la izquierda de 123. El número 10 define un ancho total de diez caracteres, es decir, se rellenan siete espacios antes de 123 para lograr la alineación derecha.
Número positivo: alineación derecha, rellena espacios a la izquierda si falta ancho Ejemplo: {0,10} → ancho de 10 caracteres, número a la derecha
Número negativo: alineación izquierda, rellena espacios a la derecha si falta ancho Ejemplo: {0,-10} → ancho de 10 caracteres, número a la izquierda
Modificamos el código así
Console.WriteLine("{0,-10}", 123); // Ocupa 10 caracteres, valor negativo = alineación izquierdaLenguaje del código: JavaScript (javascript)

Los espacios vacíos son difíciles de distinguir, así que añadimos barras verticales para diferenciarlos
Console.WriteLine("|{0,-10}|", 123);
Console.WriteLine("|{0,10}|", 456);Lenguaje del código: JavaScript (javascript)

Con los separadores verticales queda claro el funcionamiento: el 10 es un ancho fijo de 10 caracteres, negativo para alinear a la izquierda, positivo a la derecha y los huecos vacíos se completan con espacios.
La versión equivalente con interpolación es la siguiente
int one = 123;
int two = 456;
Console.WriteLine($"|{one,-10}|");
Console.WriteLine($"|{two,-10}|");Lenguaje del código: JavaScript (javascript)

3. format (formato)
Campo de formato, opcional, separado por dos puntos :
Controla el estilo de visualización de números: moneda, decimales fijos, notación científica, hexadecimal, etc.
Estructura del campo de formato :Axx
:debe ir pegado al marcador sin espacios intermediosA: especificador de una sola letra (9 formatos estándar integrados, algunos distinguen mayúsculas y minúsculas)xx: especificador de precisión (opcional, 1 a 2 dígitos, su significado varía según el carácter de formato)
// F4: formato decimal fijo, conserva 4 dígitos decimales
Console.WriteLine("{0:F4}", 12.345678);
// Equivalente con interpolación
Console.WriteLine($"{12.345678:F4}");Lenguaje del código: JavaScript (javascript)

Veamos más ejemplos
double myDouble = 12.345678;
Console.WriteLine("{0,-10:G} -- General", myDouble); // 12.345678 -- General
Console.WriteLine("{0,-10} -- Predeterminado", myDouble); // 12.345678 -- Predeterminado
Console.WriteLine("{0,-10:F4} -- Decimal fijo", myDouble); // 12.3457 -- Decimal fijo
Console.WriteLine("{0,-10:C} -- Moneda", myDouble); // $12.35 -- Moneda
Console.WriteLine("{0,-10:E3} -- Notación científica", myDouble);//1.235E+001 -- Notación científica
Console.WriteLine("{0,-10:x} -- Entero hexadecimal", 1194719); // 123adf -- Entero hexadecimalLenguaje del código: JavaScript (javascript)
Tabla de los 9 especificadores de formato numérico estándar
| Identificador | Nombre | Función | Significado de precisión | Ejemplo de salida |
|---|---|---|---|---|
| C/c | Currency Moneda | Muestra símbolo de moneda regional | Cantidad de dígitos decimales | {0:C} 12,5 → $12.50 |
| D/d | Decimal Entero decimal | Solo para tipo int, rellena ceros a la izquierda | Mínimo de dígitos a mostrar | {0:D4} 12 → 0012 |
| F/f | Fixed-point Decimal fijo | Cantidad fija de decimales | Dígitos decimales a conservar | {0:F4} 12,345678 →12.3457 |
| G/g | General Formato general | Alterna automáticamente decimal fijo / notación científica, formato por defecto | Cantidad de dígitos significativos | {0:G4} 12,345678 →12.35 |
| X/x | Hexadecimal Hexadecimal (distinge mayús/minús) | Salida hexadecimal, X mayúscula, x minúscula | Mínimo de dígitos a mostrar | {0:x} 180026 → 2bf3a |
| N/n | Number Número con separador de miles | Separador cada tres dígitos | Cantidad de decimales | {0:N2} 12345678,54321 →12,345,678.54 |
| P/p | Percent Porcentaje | Valor ×100 seguido de símbolo % | Cantidad de decimales | {0:P2} 0,1221897 →12,22 % |
| R/r | Round-trip Formato de viaje de ida y vuelta | Se puede convertir al número original sin pérdida de precisión | Se ignora el parámetro de precisión | {0:R} 1234,21897 →1234.21897 |
| E/e | Scientific Notación científica (distinge mayús/minús) | Formato exponencial, E mayúscula, e minúscula | Dígitos decimales de la mantisa | {0:e4}12,3456789 →1.2346e+001 |
Cadenas de formato numérico