createspecificculture - cultureinfo.invariantculture c#
¿Cómo configurar CultureInfo.InvariantCulture por defecto? (7)
1 cadena vacía especifica InvariantCulture en config.file
Por defecto, Culture y UICulture están configurados en "" en la configuración.
<system.web>
<globalization culture="" />
</system.web>
2 También puedes definir en tu Thread
Cuando tengo tal pieza de código en C #:
double a = 0.003;
Console.WriteLine(a);
Imprime "0,003".
Si tengo otro código:
double a = 0.003;
Console.WriteLine(a.ToString(CultureInfo.InvariantCulture));
Imprime "0.003".
Mi problema es que necesito un punto como marca decimal pero C # hace una coma por defecto. Además, no quiero escribir una línea tan larga de código solo para imprimir una variable doble.
C # no lo convierte en una coma por defecto, es tu cultura. Intenta establecer la cultura explícitamente,
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
Enlace: http://msdn.microsoft.com/en-us/library/ms425914(v=office.12).aspx
Cuando llama a WriteLine()
y da un doble, internamente hace más o menos esta llamada:
Console.WriteLine(a.ToString(CultureInfo.CurrentCulture));
La tarea ahora sería reemplazar el CurrentCulture
con InvariantCulture
. Esto se puede hacer por la siguiente línea de código:
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
Ahora su hilo está configurado como InvariantCulture y su primera llamada también debe imprimir "0.003".
Desde .NET Framework versión 4.5 (y .NET Core / Standard 1.0) puede cambiar la cultura para toda la aplicación , en lugar de solo el tema actual, modificando las propiedades CultureInfo.DefaultThreadCurrentCulture y CultureInfo.DefaultThreadCurrentUICulture :
CultureInfo.DefaultThreadCurrentCulture = CultureInfo.InvariantCulture;
CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.InvariantCulture;
Puede establecer CultureInfo.InvariantCulture
como predeterminado como se muestra arriba en @Guffa y los demás.
Pero tienes que tener una idea clara de por qué haces esto. Estará bien si realiza operaciones de exportación / importación de datos, pero probablemente no lo use para las cadenas que se presentan al usuario.
La documentación de Microsoft establece:
La cultura invariante es insensible a la cultura; está asociado con el idioma inglés pero no con ningún país / región. Usted especifica la cultura invariante por nombre usando una cadena vacía ("") en la llamada a un método de creación de instancias de CultureInfo. ...
A diferencia de los datos sensibles a la cultura, que están sujetos a cambios por personalización del usuario o por actualizaciones de .NET Framework o el sistema operativo, los datos de la cultura invariable son estables a lo largo del tiempo y entre culturas instaladas y los usuarios no pueden personalizarlos. Esto hace que la cultura invariable sea particularmente útil para las operaciones que requieren resultados independientes de la cultura, como las operaciones de formateo y análisis que persisten en los datos formateados, o las operaciones de clasificación y ordenación que requieren que los datos se muestren en un orden fijo independientemente de la cultura.
Puede establecer la cultura del hilo actual para cualquier cultura que desee:
Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture;
Tenga en cuenta que cambiar la cultura también afecta a cosas como la comparación y clasificación de cadenas, formatos de fecha y análisis de fechas y números.
Si nunca desea un formato de números y fechas específico de la cultura, puede establecer la cultura una vez, tal vez al inicio de la aplicación.
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture
Si se trata de una aplicación ASP.NET, una alternativa más simple es establecer la cultura en el elemento de configuración <globalization>
de web.config.
De lo contrario no tienes muchas alternativas para especificar la cultura explícitamente. Si se encuentra escribiendo repetitivamente la misma línea larga de código, haga lo que siempre hace en este caso: envuélvalo en un método.