Introducción: por qué las comas en los números no son solo estética
\n\nImagine: muestra en pantalla el salario de un empleado — 1500000 rublos. El ojo se pierde, los ceros se encadenan y usted cuenta los dígitos tres veces. Ahora imagine 1,500,000 — comprensión instantánea de la cantidad. La diferencia es enorme.
En Stack Overflow, la pregunta ".NET String.Format() to add commas in thousands place for a number" ha obtenido decenas de miles de visitas. Esto significa que desarrolladores de todo el mundo se enfrentan a la misma tarea: cómo formatear un número con separadores de miles de forma correcta y elegante en C#. Hoy analizaremos todos los enfoques, desde el clásico String.Format hasta las capacidades modernas de C#.
Si programa en C# y trabaja con informes, datos financieros o simplemente desea que su interfaz de usuario se vea profesional, este artículo es para usted. ¡Allá vamos!
\n\n¿Qué es String.Format() y para qué sirve?
\n\nString.Format() es un método estático que permite insertar valores de variables en una cadena de plantilla con control de formato. A diferencia de la concatenación simple, ofrece flexibilidad: puede especificar cómo mostrar el número — con separadores, con una cantidad fija de decimales, en formato monetario, etc.
La sintaxis es simple: String.Format("{0:N}", number), donde 0 es el índice del argumento y N es el especificador de formato. Pero el diablo, como siempre, está en los detalles.
Método principal: String.Format con formato "N"
\n\nLa forma más simple y obvia de agregar comas a un número es usar el especificador de formato "N" (de la palabra Number). Agrega automáticamente separadores de miles y establece la cantidad de decimales (por defecto, 2).
int number = 1234567;\nstring formatted = String.Format("{0:N}", number);\nConsole.WriteLine(formatted); // Salida: 1,234,567.00\n\n\nSi no necesita decimales, especifique "N0" — cero significa «cero decimales»:
string formatted = String.Format("{0:N0}", number);\nConsole.WriteLine(formatted); // Salida: 1,234,567\n\n\nImportante: el símbolo del separador de miles depende de la cultura actual (CultureInfo). En la configuración regional rusa será un espacio (1 234 567), en la inglesa será una coma. Si necesita específicamente una coma independientemente de la configuración regional, siga leyendo.
Alternativas: ToString("N") e interpolación de cadenas
\n\nC# moderno ofrece formas más elegantes. En lugar de String.Format, puede llamar directamente al método ToString del número:
string formatted = number.ToString("N0");\nConsole.WriteLine(formatted); // 1,234,567\n\n\nY si usa C# 6 o superior, la interpolación de cadenas hará que el código sea aún más legible:
\n\nstring formatted = $"{number:N0}";\nConsole.WriteLine(formatted); // 1,234,567\n\n\nLa interpolación es esencialmente el mismo String.Format, pero sintácticamente más agradable. Se compila en una llamada a String.Format internamente, por lo que el rendimiento es idéntico.
Ajuste fino: especificadores de formato personalizados
\n\nA veces el formato incorporado "N" no es suficiente. Por ejemplo, necesita:
- \n
- Usar un espacio en lugar de una coma \n
- Mostrar el signo «+» para números positivos \n
- Alinear números por ancho \n
Para estos casos, existen cadenas de formato personalizadas. Así es como se define el separador de miles manualmente usando el símbolo # o 0:
int number = 1234567;\nstring customFormat = "#,##0";\nstring formatted = number.ToString(customFormat);\nConsole.WriteLine(formatted); // 1,234,567\n\n\nAnalicemos qué significa "#,##0":
- \n
#— dígito opcional