Cadenas de formato numérico

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 intermedios
  • A: 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

IdentificadorNombreFunciónSignificado de precisiónEjemplo de salida
C/cCurrency MonedaMuestra símbolo de moneda regionalCantidad de dígitos decimales{0:C} 12,5 → $12.50
D/dDecimal Entero decimalSolo para tipo int, rellena ceros a la izquierdaMínimo de dígitos a mostrar{0:D4} 12 → 0012
F/fFixed-point Decimal fijoCantidad fija de decimalesDígitos decimales a conservar{0:F4} 12,345678 →12.3457
G/gGeneral Formato generalAlterna automáticamente decimal fijo / notación científica, formato por defectoCantidad de dígitos significativos{0:G4} 12,345678 →12.35
X/xHexadecimal Hexadecimal (distinge mayús/minús)Salida hexadecimal, X mayúscula, x minúsculaMínimo de dígitos a mostrar{0:x} 180026 → 2bf3a
N/nNumber Número con separador de milesSeparador cada tres dígitosCantidad de decimales{0:N2} 12345678,54321 →12,345,678.54
P/pPercent PorcentajeValor ×100 seguido de símbolo %Cantidad de decimales{0:P2} 0,1221897 →12,22 %
R/rRound-trip Formato de viaje de ida y vueltaSe puede convertir al número original sin pérdida de precisiónSe ignora el parámetro de precisión{0:R} 1234,21897 →1234.21897
E/eScientific Notación científica (distinge mayús/minús)Formato exponencial, E mayúscula, e minúsculaDígitos decimales de la mantisa{0:e4}12,3456789 →1.2346e+001

Cadenas de formato numérico

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *