2010-02-23 5 views
8

Ich habe ein Problem mit decimal.ToString("C") überschreiben. Grundsätzlich , was ich will, ist zu tun, wie folgt:Benutzerdefinierte Währung Symbol und Dezimalstellen mit Dezimal.ToString ("C") und CultureInfo

CultureInfo usCulture = new CultureInfo("en-US"); 
Thread.CurrentThread.CurrentCulture = usCulture; 

NumberFormatInfo LocalFormat = (NumberFormatInfo)NumberFormatInfo.CurrentInfo.Clone(); 
LocalFormat.CurrencySymbol = "RM"; 

Ich will obige Code eine Funktion (überschreiben ToString ("C")) machen, wodurch, wenn der folgende Code ausgeführt werden sollen:

decimal paid = Convert.ToDecimal(dr["TotalPaids"]); 
lblPaids.Text = paid.ToString("C"); 

die Ergebnisse würden statt $ 4.900,00

RM4,900.00 werden Wie erstelle ich eine Überschreibung für decimal.ToString("C"), dass mein Problem

lösen würde

Vielen Dank im Voraus.

+2

Jede Chance, dass Sie den Titel bearbeiten könnte sein beschreibender? "decimal.ToString (" C ")" zeigt nicht an, was Sie fragen. Wenn es in Google angezeigt wird, ist unklar, worum es bei der Frage geht. –

+1

@SteveHiner Wie wäre es jetzt mit dem Titel? – Korayem

+1

@Korayem: Viel besser. :-) –

Antwort

16

Um ein Format wie RM 11,123,456.00 erhalten Sie auch

CurrentCulture modified = new CultureInfo(Thread.CurrentThread.CurrentCulture.Name); 
Thread.CurrentThread.CurrentCulture = modified; 
var numberFormat = modified.NumberFormat; 
numberFormat.CurrencySymbol = "RM"; 
numberFormat.CurrencyDecimalDigits = 2; 
numberFormat.CurrencyDecimalSeparator = "."; 
numberFormat.CurrencyGroupSeparator = ","; 

die folgenden Eigenschaften festlegen müssen, wenn Sie das tun, beim Start der Anwendung dann das sollte ms-MY-Format wie en-US machen, aber mit dem RM-Währungssymbol jedes Mal, wenn Sie die ToString("C")-Methode aufrufen.

+0

Danke Mike. Meine CultureInfo ist ms-MY. Aber um Währungswerte anzuzeigen, muss ich en-US verwenden, weil es korrekt angezeigt wird. ZB ms-MY = R11.747.435 und en-US = RM11.747.435,00. Gibt es einen anderen Weg, wie über die ToString ("C") -Methode überschrieben werden. Könnten Sie mir bitte dabei helfen? –

+0

@Agamand The True - Sie können entweder 'ToString (" C ", LocalFormat)' 'immer aufrufen oder einige der anderen Eigenschaften der aktuellen cultures NumberFormatInfo ändern. Es scheint, dass Sie nur das Trennzeichen und die Anzahl der Dezimalstellen ändern möchten. Ich werde die Antwort bearbeiten, um das zu berücksichtigen. –

+0

Danke Mike, das ist perfekt. Aber wenn ich dies in Global.asax, Application_Start-Methode.Ich bekomme diesen Fehler 'System.Globalization.CultureInfo' enthält keine Definition für 'NumberFormatInfo' und keine Erweiterungsmethode 'NumberFormatInfo' akzeptiert ein erstes Argument vom Typ 'System.Globalization.CultureInfo' könnte gefunden werden (fehlt Ihnen ein mit Direktive oder einer Assembly-Referenz?) Ich habe bereits System.Globalization importiert. Wie kann ich das lösen .... –

2

Verwendung dieses Format string:

#,##0.00 $;#,##0.00'- $';0 $ 
decimal paid = Convert.ToDecimal(dr["TotalPaids"]); 
lblPaids.Text = paid.ToString("#,##0.00 $;#,##0.00'- $';0 $"); 
+2

Boiiiiiing (Kopf fällt aus) – demoncodemonkey

6

Wenn ich Ihre Frage richtig verstanden, was Sie wollen, ist das $ mit RM zu ersetzen. Wenn ja, müssen Sie das benutzerdefinierte Format zu übergeben ...

lblPaids.Text = paid.ToString("C", LocalFormat); 
+0

Tq für die Antwort, aber die lokale CultureInfo ist (ms-MY). Da ich Windows XP benutze, ist das Währungszeichen für diese Kultur R und nicht RM, welches das korrekte Zeichen ist. –

+0

Nun, Sie müssen den Wert ändern, den Sie festlegen: LocalFormat.CurrencySymbol = "R"; – Jonathan

-1
lblPaids.Text = paid.ToString("C",usCulture.Name); 

Oder

lblPaids.Text = paid.ToString("C",LocalFormat.Name); 

arbeiten müssen

2

Sie können die Double.ToString Methode verwenden (String, IFormatProvider) https://msdn.microsoft.com/en-us/library/d8ztz0sa(v=vs.110).aspx

double amount = 1234.95; 

amount.ToString("C") // whatever the executing computer thinks is the right fomat 

amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-ie")) // €1,234.95 
amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("es-es")) // 1.234,95 € 
amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-GB")) // £1,234.95 

amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-au")) // $1,234.95 
amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-us")) // $1,234.95 
amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-ca")) // $1,234.95 
Verwandte Themen