2012-07-27 14 views
7

Hay muchos lugares en mi proyecto donde trato de mostrar la moneda con el formato de moneda {0:C} incorporado. Si el número es negativo, rodea el valor entre paréntesis. Quiero que use un signo negativo en su lugar.¿Puedo obtener el formato de moneda estándar para usar un signo negativo en lugar de paréntesis?

Mi web.config tiene cultura establecida en auto, y se resuelve en en-US.

La solución ideal sería algún Web.config global o en otro entorno que haría que la pantalla {0:C} el signo negativo para la cultura en-US, pero estoy abierto a otras soluciones, menos impresionantes también.

+0

posible duplicado de [A nivel mundial el cambio de formato de números negativos de moneda en C#] (http://stackoverflow.com/questions/3994601/globally-changing-format-of-negative-currency-numbers-inc-c-sharp) – jmort253

Respuesta

10

Creo que una combinación de las respuestas aquí te acercará más a lo que quieres.

protected void Application_BeginRequest() 
{ 
    var ci = CultureInfo.GetCultureInfo("en-US"); 

    if (Thread.CurrentThread.CurrentCulture.DisplayName == ci.DisplayName) 
    { 
     ci = CultureInfo.CreateSpecificCulture("en-US"); 
     ci.NumberFormat.CurrencyNegativePattern = 1; 
     Thread.CurrentThread.CurrentCulture = ci; 
     Thread.CurrentThread.CurrentUICulture = ci; 
    } 
} 

Si desea no tener ningún código que se ocupa de una sola cultura como esto ... Creo que usted necesita para construir su propia cultura ... Check this Question

1

Por lo que entiendo su pregunta.

Quiere mostrar el formato de moneda según una cultura.

Cada vez que haces cosas específicas de la cultura, .NET mira Thread.CurrentThread.CurrentCulture y Thread.CurrentThread.CurrentUICulture.

Puede establecer la referencia cultural que desea en ASP.NET en el método global.asax BeginRequest.

protected void Application_BeginRequest() 
{ 
    var ci = CultureInfo.GetCultureInfo("en-US"); // put the culture you want in here 

    Thread.CurrentThread.CurrentCulture = ci; 
    Thread.CurrentThread.CurrentUICulture = ci; 
} 
8

tiene que especificar la correcta NumberFormatInfo.CurrencyNegativePattern que es probablemente 1.

Decimal dec = new Decimal(-1234.4321); 
CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US"); 
culture.NumberFormat.CurrencyNegativePattern = 1; 
String str = String.Format(culture, "{0:C}", dec); 
Console.Write(str); 

demo: http://ideone.com/HxSqT

de salida:

-$1,234.43 
+0

Creo que CurrencyNegativePattern se supone que es 1. En los Estados Unidos, el símbolo de moneda debe estar en el lado izquierdo y no en el derecho. – Sam

+0

@Sam: edité mi respuesta en consecuencia. –

+0

Definitivamente es fácil cambiar de 5 a 1. :) – Sam

Cuestiones relacionadas