Warning: Undefined array key "typ" in /srv/vhost/diaridigital.net/home/html/sourcecode/main/articles.php on line 18
Formato de números en C#
Tiempo de lectura: 1 minutos
Hay una gran variedad de máscaras de formato para números y fechas en diferentes idiomas. Este es un resumen de los formatos más habituales en C# para tener a mano.
Uso de '0' o '#'
El caracter '0' se utiliza para determinar el número máximo de dígitos que se han de mostrar y rellenar con ceros los espacio vacíos. En cambio, el el '#' se utiliza para determinar el número máximo de dígitos y dejar los espacios vacíos, en blanco. Se puede utilizar tanto por la derecha como por la izquierda del punto decimal. El valor de referencia en el ejemplo es el número 1234.567
double number = 1234.567;
PrintSample("{0,8:0.00}", number);
PrintSample("{0:0.##}", number);
PrintSample("{0:00.0}", number);
Da esta salida:
Formato {0,8:0.00} --> 1234,57
Formato {0:0.##} -->1234,57
Formato {0:00.0} -->1234,6 Alineación
La alineación de las cifras se consigue con el segundo parámetro de formato. Por ejemplo, en la máscara {0,8:N2} '0' indica el primer elemento a formatear; '8' indica las posiciones que ocupará y, por ser positivo, alineado a la derecha; N2 el formato numérico con 2 decimales.
EL valor negativo indica alineación a la izquierda.
decimal[] amounts = { 16305.32m, 18794.16m };
Console.WriteLine
(" |Saldo apertura Saldo cierre1|");
Console.WriteLine
(" |{0,-28:N2}{1,14:N2}|", amounts[0], amounts[1]); Da esta salida:
|Saldo apertura Saldo cierre|
|16.305,32 18.794,16|
Variedad idiomática
Si utilizamos elementos que son dependientes del idioma, como la divisa o el formato de separadores decimales, es necesario especificar el idioma, siempre que no sea el que utiliza el sistema. El formato de uso es
public string Format(IFormatProvider, string, object) Por ejemplo, utilizamos los idiomas inglés y español
var enCulture = new CultureInfo("en-US");
var esCulture = new CultureInfo("es-ES");
Para formatear en divisa:
Console.WriteLine("Divisa {0}: {1:c}", enCulture.Name,
number.ToString(enCulture));
Console.WriteLine("Divisa {0}: {1:c}", esCulture.Name,
number.ToString(esCulture));
Da esta salida:
Divisa en-US: 1234.567 $
Divisa es-ES: 1234,567 € Para los separadores de miles y punto decimal:
Console.WriteLine("{0}: {1:0n}", enCulture.Name,
number.ToString(enCulture));
Console.WriteLine("{0}: {1:0n}", esCulture.Name,
number.ToString(esCulture));
Da esta salida:
Divisa en-US: 1,234.567
Divisa es-ES: 1.234,567
Formatos genéricos
Hay una serie de formatos con un código breve que producen formatos específicos
PrintSample("{0:e}", number); // exponencial
PrintSample("{0:f}", number); // fixed-point
PrintSample("{0:g}", number); // general
PrintSample("{0:n}", number); // separador miles
PrintSample("{0:p}", number); // porcentaje
PrintSample("{0:r}", number); // round-trip Da esta salida:
Formato {0:e} -->1,234567e+003
Formato {0:f} -->1234,57
Formato {0:g} -->1234,567
Formato {0:n} -->1.234,57
Formato {0:p} -->123.456,70 %
Formato {0:r} -->1234,567 El 'round-trip' es un formato de conversión que permite tener una salida que se puede reutilizar como valor numérico, si ejecutamos este código
double doubleVal = 0.91234582637;
string str = doubleVal.ToString("R",
CultureInfo.InvariantCulture);
double resRound = double.Parse(str,
CultureInfo.InvariantCulture);
Console.WriteLine(doubleVal.Equals(resRound));
Da como resultado:
True