Nuestro grupo especializado pasados varios días de investigación y de recopilar de datos, hemos dado con la solución, esperamos que te sea de utilidad para tu plan.
Solución:
En realidad prefiero una tercera forma:
Console.WriteLine("0:N", val / 1085);
Console.WriteLine
puede hacer el String.Format
para usted.
Console.WriteLine
no le permite suministrar una cultura. Si eso es lo que quieres, aún tendrás que usar String.Format
. Como en:
String.Format(CultureInfo.InvariantCulture, "0:N", 123456789);
No recomiendo usar eso porque los usuarios internacionales tendrán problemas para leerlo. A mi 123,456,789.00
se ve extraño
Para formato + cultura prefiero:
.ToString("####0.00",CultureInfo.InvariantCulture)
o
.ToString("N",CultureInfo.InvariantCulture)
Encontré una forma invariable y genérica de resolver eso de la siguiente manera:
Sintaxis:
.ToStringInvariant(format)
.ToStringInvariant()
Técnicamente, es un método de extensión genérico, definido de la siguiente manera:
public static class Extensions
private static IFormatProvider inv
= System.Globalization.CultureInfo.InvariantCulture.NumberFormat;
public static string ToStringInvariant(this T obj, string format=null)
return (format == null) ? System.FormattableString.Invariant($"obj")
: String.Format(inv, $"0:format", obj);
El uso es simple, solo use .ToStringInvariant()
en vez de .ToString()
. La ventaja es que funciona para cualquier tipo de datos.
Opcionalmente, también puede pasar un formato, como por ejemplo .ToStringInvariant("N")
tal y como estás acostumbrado con .ToString("N")
. Tenga en cuenta que, en ese caso, el método de extensión usa String.Format internamente.
Puede ver la diferencia si tiene una cultura diferente para el formato de número, como en Alemania tenemos una coma en lugar de un punto decimal. Eso significa que en una PC con configuración cultural alemana:
void Main()
var val = 2456.5;
Console.WriteLine((val/1085).ToString("N"));
Console.WriteLine((val/1085).ToStringInvariant("N"));
Console.WriteLine((val/1085).ToStringInvariant("0.000"));
Console.WriteLine((val/1085).ToStringInvariant());
saldría:
2,26
2.26
2.264
2.26405529953917
lo cual es correcto, porque .ToString
utiliza la cultura actual (configuración alemana), y .ToStringInvariant
siempre usa la referencia cultural invariable, que es el formato de número en inglés, independientemente de la configuración de Windows.
Nota: Para formato de fecha, He proporcionado un método de extensión diferente, que puede encontrar aquí.
Más información: Método FormattableString.Invariant(FormattableString)