Formateo de Salida en C#

En C#, el formateo de salida se logra a través de Console.WriteLine, string.Format y la interpolación de strings ($\"...\"). A diferencia de C, los especificadores de formato no dependen del tipo, sino que usan marcadores de posición con cadenas de formato.

Sintaxis Básica del Formateo

Uso de Marcadores de Posición


Console.WriteLine("{0} y {1}", 123, 3.14);
// Salida: 123 y 3.14

Los marcadores {0} y {1} representan los argumentos por orden de índice. C# invoca automáticamente el método ToString() de cada parámetro.

Marcadores con Formato Específico

Formato general: {índice[,alineación][:cadenaFormato]}

  • índice: Posición del argumento (obligatorio).
  • alineación: Ancho deseado (positivo para derecha, negativo para izquierda).
  • cadenaFormato: Define el estilo de visualización (ej. N2 para dos decimales, X para hexadecimal).

int dato = 123;
double valorPi = 3.14159;

Console.WriteLine("{0:D}", dato);       // Decimal: 123
Console.WriteLine("{0,5}", dato);       // Ancho 5, derecha: "  123"
Console.WriteLine("{0,-5}", dato);      // Ancho 5, izquierda: "123  "
Console.WriteLine("{0:F2}", valorPi);   // Dos decimales: 3.14
Console.WriteLine("{0:P}", 0.75);       // Porcentaje: 75.00%

Cadenas de Formato Numérico Estándar

Formato Descripción Ejemplo (numero = 5678.9123) Salida
D o d Entero decimal {0:D} 5678
N o n Número con separadores de miles {0:N1} 5,678.9
F o f Decimal fijo {0:F3} 5678.912
E o e Notación científica {0:E1} 5.7E+003
C o c Moneda {0:C} $5,678.91
P o p Porcentaje {0:P2} 567891.23%
X o x Hexadecimal (solo enteros) {0:X} 162E

Nota: D y X son exclusivos parra tipos enteros; los decimales usan F, E, etc.

Salida en Binario, Octal y Hexadecimal

Hexadecimal Integrado


int cantidad = 200;
Console.WriteLine("{0:X}", cantidad);   // Salida: C8 (mayúsculas)
Console.WriteLine("{0:x}", cantidad);   // Salida: c8 (minúsculas)
Console.WriteLine("{0:X4}", cantidad);  // Salida: 00C8 (ancho 4, relleno con ceros)

Octal mediante Conversión

Usar Convert.ToString(valor, 8):


int cantidad = 42;
string octal = Convert.ToString(cantidad, 8);
Console.WriteLine(octal);               // Salida: 52
// Alineación manual si se requiere
Console.WriteLine("{0,5}", octal);      // "   52"

Binario mediante Conversión

Usar Convert.ToString(valor, 2):


int cantidad = 42;
string binario = Convert.ToString(cantidad, 2);
Console.WriteLine(binario);             // Salida: 101010
// Ancho fijo (ej. 8 bits) con PadLeft
Console.WriteLine(binario.PadLeft(8, '0')); // Salida: 00101010

Uso en Interpolación de Strings


int numero = 255;
Console.WriteLine($"Hexadecimal: {numero:X}");               // FF
Console.WriteLine($"Binario: {Convert.ToString(numero, 2)}"); // 11111111

Ejemplo Completo


using System;

class Programa
{
    static void Main()
    {
        int decimalVal = 42;
        double piVal = 3.14159;
        char caract = 'A';
        string texto = "Hola";

        Console.WriteLine("Decimal: {0}", decimalVal);
        Console.WriteLine("Ancho 5 derecha: {0,5}", decimalVal);
        Console.WriteLine("Ancho 5 izquierda: {0,-5}", decimalVal);
        Console.WriteLine("Relleno ceros: {0:D5}", decimalVal);
        Console.WriteLine("Decimal (por defecto): {0}", piVal);
        Console.WriteLine("Dos decimales: {0:F2}", piVal);
        Console.WriteLine("Ancho 8, dos decimales: {0,8:F2}", piVal);
        Console.WriteLine("Hexadecimal minúsculas: {0:x}", decimalVal);
        Console.WriteLine("Hexadecimal mayúsculas: {0:X}", decimalVal);
        Console.WriteLine("Octal: {0}", Convert.ToString(decimalVal, 8));
        Console.WriteLine("Binario: {0}", Convert.ToString(decimalVal, 2));
        Console.WriteLine("Carácter: {0}", caract);
        Console.WriteLine("Texto: {0}", texto);
    }
}

Salida esperada:


Decimal: 42
Ancho 5 derecha:    42
Ancho 5 izquierda: 42   
Relleno ceros: 00042
Decimal (por defecto): 3.14159
Dos decimales: 3.14
Ancho 8, dos decimales:     3.14
Hexadecimal minúsculas: 2a
Hexadecimal mayúsculas: 2A
Octal: 52
Binario: 101010
Carácter: A
Texto: Hola

Comparación con printf de C

Formato printf en C Salida Equivalente en C#
%d 42 {0} o {0:D}
%5d " 42" {0,5}
%-5d "42 " {0,-5}
%05d "00042" {0:D5}
%.2f 3.14 {0:F2}
%8.2f " 3.14" {0,8:F2}
%x "2a" {0:x}
%X "2A" {0:X}
%o "52" Convert.ToString(42, 8)
Binario (no estándar) "101010" Convert.ToString(42, 2)

Técnica Avanzada: Personalización para Binario/Octal

Se puede crear un método de extensión para simplificar la salida en binario:


// Método de extensión en una clase estática
public static string ABinario(this int valor, int digitosMinimos = 0)
{
    string bin = Convert.ToString(valor, 2);
    return digitosMinimos > 0 ? bin.PadLeft(digitosMinimos, '0') : bin;
}

// Uso
int x = 42;
Console.WriteLine(x.ABinario());      // 101010
Console.WriteLine(x.ABinario(8));     // 00101010

En proyectos simples, usar Convert.ToString es suficiente para estos formatos.

Etiquetas: C# .NET formateo de cadenas Console.WriteLine String.Format

Publicado el 7-11 07:27