2016-10-04 1 views
2

Ich möchte eine Zahl mit einer zugeordneten Währung in eine länderspezifische Zeichenfolge formatieren. Der Standard .ToString("C", CultureInfo.CreateSpecificCulture("xxx")) erzeugt die falsche Ausgabe, da die Währung des Gebietsschemas nicht die Währung ist, die der Wert tatsächlich darstellt.Währung angeben, wenn Geld als Zeichenfolge formatiert wird

Ich bin Suche nach einem Weg zu tun, was JQuery Globalize tut, aber in C# (Siehe here, relavent Tabelle unten)

 
              Locale 
         ----------------------------------------- 
3-letter currency code | en (English) | de (German) | zh (Chinese) 
---------------------- | ------------ | ----------- | ------------ 
USD     | $1.00  | 1,00 $  | US$ 1.00 
EUR     | €1.00  | 1,00 €  | € 1.00 
CNY     | CN¥1.00  | 1,00 CN¥ | ¥ 1.00 
JPY     | ¥1   | 1 ¥   | JP¥ 1 
GBP     | £1.00  | 1,00 £  | £ 1.00 
BRL     | R$1.00  | 1,00 R$  | R$ 1.00 
+0

Ihr Code z.B. '1.ToString (" C ", System.Globalization.CultureInfo.CreateSpecificCulture (" fr-FR "))' gibt eine Ausgabe als 1,00 € und für "en-US" ist das Ergebnis $ 1.00 Was genau Sie versuchen ? – GauravKP

+0

Ich habe 1 USD. Ich möchte es für das Gebietsschema fr-FR formatieren. '1.ToString (" C ", CultureInfo.CreateSpecificCulture (" fr-F R ")) gibt" 1,00 € "was die falsche Währung ist. Ich möchte "1,00 $" bekommen – flipchart

+0

Verstanden, dies wird helfen https://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.numberdecimalseparator(v=vs.110).aspx – GauravKP

Antwort

4
string FormatCurrency(decimal value, string currencyCode, string locale) 
{ 
    var culture = CultureInfo.CreateSpecificCulture(locale); 
    var numberFormat = (NumberFormatInfo) culture.NumberFormat.Clone(); 
    var currencySymbol = CultureInfo.GetCultures(CultureTypes.AllCultures) 
            .Where(ci => ci!=CultureInfo.InvariantCulture) 
            .Select(c =>{try{return new RegionInfo(c.LCID);} 
                catch{return null;}}) 
            .Where(ri=>ri!=null && 
               ri.ISOCurrencySymbol==currencyCode) 
            .Select(ri => ri.CurrencySymbol) 
            .First(); 
    numberFormat.CurrencySymbol = currencySymbol; 
    return value.ToString("C",numberFormat); 
} 

FormatCurrency(1m,"USD","de") kehrt "1,00 $" und so weiter, aber es funktioniert nicht Unterscheiden Sie zwischen CN¥ und JP¥ oder etwas Ähnlichem in jedem Gebietsschema. Das Währungssymbol wird immer noch von seinem ursprünglichen Gebietsschema verwendet. Sie können die zusätzlichen Währungsinformationen von der Unicode Common Locale Data Repository (CLDR) erhalten.

Verwandte Themen