2010-06-28 12 views
35

Me gustaría cambiar el punto decimal a otro carácter en C#. Tengo una variable de doublevalueCómo cambiar el símbolo del punto decimal en double.ToString()?

double value; 

y cuando utilizo el comando:

Console.WriteLine(value.ToString()); // output is 1,25 

Sé que puedo hacer esto:

Console.WriteLine(value.ToString(
    CultureInfo.CreateSpecificCulture("en-GB"))); // output is 1.25 

pero no me gusta mucho porque es muy largo y lo necesito con bastante frecuencia en mi programa.

¿Existe una versión más corta para configurar el "punto decimal" realmente como punto y no coma, como es habitual en mi cultura?

Respuesta

77

Algunos accesos directos crean una clase NumberFormatInfo, establezca su propiedad NumberDecimalSeparator en "." y use la clase como parámetro para el método ToString() siempre que lo necesite.

NumberFormatInfo nfi = new NumberFormatInfo(); 
nfi.NumberDecimalSeparator = "."; 

value.ToString(nfi); 
+2

¡Me gusta más este método porque es independiente del lenguaje! –

15

Tal vez esté malinterpretando el propósito de su pregunta, por lo tanto, corríjanme si me equivoco, pero ¿no puede aplicar la configuración de cultura globalmente una vez y luego no preocuparse por personalizar cada declaración de escritura?

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB"); 
+0

Bueno, no lo necesito en todo el programa. Lo necesito para ajustarlo al formato de PathGeometry en WPF donde se esperan los puntos decimales. Pero resulta que esta solución no duele más. ¡Gracias! –

+0

@womp ¡Por mucho mejor respuesta! ¿Esto también se aplica a subhilos si configuro eso en mi hilo principal? Me gustaría aplicar esta configuración para todo el tiempo de ejecución de mi ensamblaje. – Bitterblue

32

¿Cree un método de extensión?

Console.WriteLine(value.ToGBString()); 

// ... 

public static class DoubleExtensions 
{ 
    public static string ToGBString(this double value) 
    { 
     return value.ToString(CultureInfo.GetCultureInfo("en-GB")); 
    } 
} 
+0

Quizás alguien haya votado negativamente porque, aunque funciona como un amuleto, podría hacerse de una manera más bonita, estableciendo la información cultural globalmente. Por cierto. No soy el infractor.:) –

+1

@Thomas: De hecho, aunque cuando el OP dice * "Lo necesito con bastante frecuencia en mi programa" *, interpreté que significaba algo así como * "a menudo, pero no siempre" *. – LukeH

14

Puede cambiar el separador decimal cambiando el cultivo utilizado para mostrar el número. Sin embargo, tenga en cuenta que esto cambiará todo lo demás sobre el número (por ejemplo, separador de agrupación, tamaños de agrupación, número de lugares decimales). A partir de su pregunta, parece que va a adoptar una cultura que usa una coma como separador decimal.

Para cambiar simplemente el separador decimal sin cambiar la cultura, se puede modificar la propiedad NumberDecimalSeparator de la cultura actual de NumberFormatInfo.

Thread.CurrentCulture.NumberFormat.NumberDecimalSeparator = "."; 

Esto modificará la cultura actual del hilo. Ahora se alterará todo el resultado, lo que significa que puede usar value.ToString() para generar el formato que desee, sin preocuparse por cambiar la cultura cada vez que muestre un número.

(Tenga en cuenta que una cultura neutral no puede haber cambiado su separador decimal.)

+5

Si intenta hacer eso, obtendrá un error de "La instancia es de solo lectura". –

+0

@MariusStanescu Creo que esto solo ocurre cuando se usa una cultura neutra como adrianbanks anotó al final de su respuesta. – patrickbadley

+0

@patrickbadley Acabo de probar esta solución y encontré el error de "solo lectura". Agregar "Culture.IsNeutralCulture" en "Watch window" cleary mostró que la cultura no era neutral. Sin embargo, también noté que era de solo lectura. La clonación de la cultura parece ser la forma correcta de evitar esto. Consulte la siguiente [respuesta] (http://stackoverflow.com/a/3912937/4625305). – AXMIM

1

Si usted tiene una aplicación Web Asp.Net, también puede configurarlo en el web.config para que sea el mismo en todo el aplicación web completa

<system.web> 
    ... 
    <globalization 
     requestEncoding="utf-8" 
     responseEncoding="utf-8" 
     culture="en-GB" 
     uiCulture="en-GB" 
     enableClientBasedCulture="false"/> 
    ... 
</system.web> 
Cuestiones relacionadas