2012-07-27 10 views
7

W moim projekcie jest wiele miejsc, w których próbuję wyświetlać walutę za pomocą wbudowanego formatu waluty {0:C}. Jeśli liczba jest ujemna, otacza wartość w nawiasach. Chcę, aby zamiast tego używał znaku minus.Czy mogę uzyskać standardowy format waluty, aby zamiast nawiasów używać znaku minus?

Mój web.config ma ustawioną kulturę na auto i przechodzi na en-US.

Idealnym rozwiązaniem byłby jakiś globalny web.config lub inne ustawienie, które sprawiłoby, że {0:C} wyświetlałby negatywny znak dla kultury en-US, ale jestem także otwarty na inne, mniej niesamowite rozwiązania.

+0

możliwe duplikat [Globalnie zmianie formatu ujemne numery walut w języku C#] (http://stackoverflow.com/questions/3994601/globally-changing-format-negative-currency-numbers-in-c-sharp) – jmort253

Odpowiedz

10

myślę kombinacja odpowiedzi tutaj zbliży cię do tego, co chcesz.

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; 
    } 
} 

Jeśli chcesz nie mieć żadnego kodu, który zajmuje się jednym kultury jak ten ... Wierzę trzeba zbudować swoją własną kulturę ... Check this Question

1

O ile rozumiem twoje pytanie.

Chcesz pokazać format waluty w zależności od kultury.

Za każdym razem, gdy robisz określone rzeczy w kulturze, .NET wygląda na Thread.CurrentThread.CurrentCulture i Thread.CurrentThread.CurrentUICulture.

Możesz ustawić żądaną kulturę w ASP.NET w metodzie 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

Musisz podać prawidłową NumberFormatInfo.CurrencyNegativePattern który jest prawdopodobnie 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

wyjściowa:

-$1,234.43 
+0

Myślę, że CurrencyNegativePattern ma wynosić 1. W USA symbol waluty powinien znajdować się po lewej stronie, a nie po prawej stronie. – Sam

+0

@Sam: Poprawnie edytowałem swoją odpowiedź. –

+0

Zdecydowanie łatwo zmienić 5 na 1. :) – Sam

Powiązane problemy