it-swarm.com.de

3-stelliger Währungscode zum Währungssymbol

Ist es in C # möglich, ein Währungssymbol wie '£' aus dem dreistelligen Währungscode zu erhalten, in diesem Fall 'GBP'?

Ist dies entweder in SQL Server oder in C # möglich?

41
Sachin Kainth

Obwohl etwas brutal und nicht besonders elegant, könnte man es so machen:

public bool TryGetCurrencySymbol(string ISOCurrencySymbol, out string symbol)
{
    symbol = CultureInfo
        .GetCultures(CultureTypes.AllCultures)
        .Where(c => !c.IsNeutralCulture)
        .Select(culture => {
            try{
                return new RegionInfo(culture.LCID);
            }
            catch
            {
                return null;
            }
        })
        .Where(ri => ri!=null && ri.ISOCurrencySymbol == ISOCurrencySymbol)
        .Select(ri => ri.CurrencySymbol)
        .FirstOrDefault();
    return symbol != null;
}

und benutze es wie folgt:

string currSymbol;
if(TryGetCurrencySymbol("GBP",out currSymbol))
{
    Console.WriteLine("symbol is {0}", currSymbol);
}

Wenn Sie davon ausgehen, dass diese Methode gehämmert wird, ist es besser, einen Cache im Voraus zu erstellen:

public static class CurrencyTools
{
    private static IDictionary<string,string> map;
    static CurrencyTools()
    {
        map = CultureInfo
            .GetCultures(CultureTypes.AllCultures)
            .Where(c => !c.IsNeutralCulture)
            .Select(culture => {
                try{
                    return new RegionInfo(culture.LCID);
                }
                catch
                {
                    return null;
                }
            })
            .Where(ri => ri!=null)
            .GroupBy(ri => ri.ISOCurrencySymbol)
            .ToDictionary(x => x.Key, x => x.First().CurrencySymbol);
    }
    public static bool TryGetCurrencySymbol(
                          string ISOCurrencySymbol, 
                          out string symbol)
    {
        return map.TryGetValue(ISOCurrencySymbol,out symbol);
    }
}

Zum Zeitpunkt des Schreibens, auf meinem Computer usw. usw. enthält die Karte folgende Zuordnungen:

AED د.إ.‏ 
AFN ؋ 
ALL Lek 
AMD դր. 
ARS $ 
AUD $ 
AZN man. 
BAM KM 
BDT ৳ 
BGN лв. 
BHD د.ب.‏ 
BND $ 
BOB $b 
BRL R$ 
BYR р. 
BZD BZ$ 
CAD $ 
CHF fr. 
CLP $ 
CNY ¥ 
COP $ 
CRC ₡ 
CSD Din. 
CZK Kč 
DKK kr. 
DOP RD$ 
DZD DZD 
EEK kr 
EGP ج.م.‏ 
ETB ETB 
EUR € 
GBP £ 
GEL Lari 
GTQ Q 
HKD HK$ 
HNL L. 
HRK kn 
HUF Ft 
IDR Rp 
ILS ₪ 
INR रु 
IQD د.ع.‏ 
IRR ريال 
ISK kr. 
JMD J$ 
JOD د.ا.‏ 
JPY ¥ 
KES S 
KGS сом 
KHR ៛ 
KRW ₩ 
KWD د.ك.‏ 
KZT Т 
LAK ₭ 
LBP ل.ل.‏ 
LKR රු. 
LTL Lt 
LVL Ls 
LYD د.ل.‏ 
MAD د.م.‏ 
MKD ден. 
MNT ₮ 
MOP MOP 
MVR ރ. 
MXN $ 
MYR RM 
NIO N 
NOK kr 
NPR रु 
NZD $ 
OMR ر.ع.‏ 
PAB B/. 
PEN S/. 
PHP PhP 
PKR Rs 
PLN zł 
PYG Gs 
QAR ر.ق.‏ 
RON lei 
RSD Din. 
RUB р. 
RWF RWF 
SAR ر.س.‏ 
SEK kr 
SGD $ 
SYP ل.س.‏ 
THB ฿ 
TJS т.р. 
TMT m. 
TND د.ت.‏ 
TRY TL 
TTD TT$ 
TWD NT$ 
UAH ₴ 
USD $ 
UYU $U 
UZS so'm 
VEF Bs. F. 
VND ₫ 
XOF XOF 
YER ر.ي.‏ 
ZAR R 
ZWL Z$ 
66
spender

.NET hat CultureInfo.NumberFormat.CurrencySymbol

CultureInfo us = new CultureInfo("en-US");
CultureInfo gb = new CultureInfo("en-GB");
CultureInfo fr = new CultureInfo("fr-FR");

Console.Out.WriteLine(us.NumberFormat.CurrencySymbol); // $
Console.Out.WriteLine(gb.NumberFormat.CurrencySymbol); // £
Console.Out.WriteLine(fr.NumberFormat.CurrencySymbol); // €

Dies erfordert jedoch den Kulturnamen und nicht "GBP". Soweit ich weiß, ist es nicht direkt aus "GBP" usw. möglich.

Dieselbe Information ist auch über RegionInfo zusammen mit dem Währungscode verfügbar:

RegionInfo us = new RegionInfo("en-US");
RegionInfo gb = new RegionInfo("en-GB");
RegionInfo fr = new RegionInfo("fr-FR");

Console.Out.WriteLine(us.CurrencySymbol); // $
Console.Out.WriteLine(gb.CurrencySymbol); // £
Console.Out.WriteLine(fr.CurrencySymbol); // €

Console.Out.WriteLine(us.ISOCurrencySymbol); // USD
Console.Out.WriteLine(gb.ISOCurrencySymbol); // GBP
Console.Out.WriteLine(fr.ISOCurrencySymbol); // EUR

Ich vermute, man könnte das verwenden, um eine Karte vom ISO-Code zum Symbol zu erstellen.

Die Liste der Kulturnamen ist verfügbar hier .

EDIT: Nun, das scheint zu funktionieren:

public static class CurrencyCodeMapper
{
    private static readonly Dictionary<string, string> SymbolsByCode;

    public static string GetSymbol(string code) { return SymbolsByCode[code]; }

    static CurrencyCodeMapper()
    {
        SymbolsByCode = new Dictionary<string, string>();

        var regions = CultureInfo.GetCultures(CultureTypes.SpecificCultures)
                      .Select(x => new RegionInfo(x.LCID));

        foreach (var region in regions)
            if (!SymbolsByCode.ContainsKey(region.ISOCurrencySymbol))
                SymbolsByCode.Add(region.ISOCurrencySymbol, region.CurrencySymbol);
    }
}

Verwendungszweck:

CurrencyCodeMapper.GetSymbol("USD") // $
CurrencyCodeMapper.GetSymbol("GBP") // £
CurrencyCodeMapper.GetSymbol("EUR") // €

Beachten Sie natürlich, dass dies keine umfassende Liste ergibt. Insbesondere werden nicht die alten Währungen der Eurozone berücksichtigt, die durch den Euro ersetzt wurden. Ich kann nichts dagegen tun, aber solche Währungen manuell hinzufügen, wenn Sie sie benötigen, zum Beispiel SymbolsByCode.Add("FRF", "₣"); für französische Franken.

36
verdesmarald

Dies funktioniert nicht in Windows Phone-Anwendungen, da CultureInfo.GetCultures auf der Plattform nicht verfügbar ist (zumindest noch nicht). Also hier ist eine schnelle und schmutzige Lösung - gemacht mit Hilfe der Antwort von spender, die alle Kulturcodes und Währungen zum Datum enthält.

public static class CurrencyHelper
{
    public static string GetCurrencySymbol(string code)
    {
        if (Currencies.ContainsKey(code))
        {
            return Currencies[code];
        }
        else
        {
            return code;
        }
    }

    public static Dictionary<string, string> Currencies = new Dictionary<string, string>() {
                                                    {"AED", "د.إ.‏"},
                                                    {"AFN", "؋ "},
                                                    {"ALL", "Lek"},
                                                    {"AMD", "դր."},
                                                    {"ARS", "$"},
                                                    {"AUD", "$"}, 
                                                    {"AZN", "man."}, 
                                                    {"BAM", "KM"}, 
                                                    {"BDT", "৳"}, 
                                                    {"BGN", "лв."}, 
                                                    {"BHD", "د.ب.‏ "},
                                                    {"BND", "$"}, 
                                                    {"BOB", "$b"}, 
                                                    {"BRL", "R$"}, 
                                                    {"BYR", "р."}, 
                                                    {"BZD", "BZ$"}, 
                                                    {"CAD", "$"}, 
                                                    {"CHF", "fr."}, 
                                                    {"CLP", "$"}, 
                                                    {"CNY", "¥"}, 
                                                    {"COP", "$"}, 
                                                    {"CRC", "₡"}, 
                                                    {"CSD", "Din."}, 
                                                    {"CZK", "Kč"}, 
                                                    {"DKK", "kr."}, 
                                                    {"DOP", "RD$"}, 
                                                    {"DZD", "DZD"}, 
                                                    {"EEK", "kr"}, 
                                                    {"EGP", "ج.م.‏ "},
                                                    {"ETB", "ETB"}, 
                                                    {"EUR", "€"}, 
                                                    {"GBP", "£"}, 
                                                    {"GEL", "Lari"}, 
                                                    {"GTQ", "Q"}, 
                                                    {"HKD", "HK$"}, 
                                                    {"HNL", "L."}, 
                                                    {"HRK", "kn"}, 
                                                    {"HUF", "Ft"}, 
                                                    {"IDR", "Rp"}, 
                                                    {"ILS", "₪"}, 
                                                    {"INR", "रु"}, 
                                                    {"IQD", "د.ع.‏ "},
                                                    {"IRR", "ريال "},
                                                    {"ISK", "kr."}, 
                                                    {"JMD", "J$"}, 
                                                    {"JOD", "د.ا.‏ "},
                                                    {"JPY", "¥"}, 
                                                    {"KES", "S"}, 
                                                    {"KGS", "сом"}, 
                                                    {"KHR", "៛"}, 
                                                    {"KRW", "₩"}, 
                                                    {"KWD", "د.ك.‏ "},
                                                    {"KZT", "Т"}, 
                                                    {"LAK", "₭"}, 
                                                    {"LBP", "ل.ل.‏ "},
                                                    {"LKR", "රු."}, 
                                                    {"LTL", "Lt"}, 
                                                    {"LVL", "Ls"}, 
                                                    {"LYD", "د.ل.‏ "},
                                                    {"MAD", "د.م.‏ "},
                                                    {"MKD", "ден."}, 
                                                    {"MNT", "₮"}, 
                                                    {"MOP", "MOP"}, 
                                                    {"MVR", "ރ."}, 
                                                    {"MXN", "$"}, 
                                                    {"MYR", "RM"}, 
                                                    {"NIO", "N"}, 
                                                    {"NOK", "kr"}, 
                                                    {"NPR", "रु"}, 
                                                    {"NZD", "$"}, 
                                                    {"OMR", "ر.ع.‏ "},
                                                    {"PAB", "B/."}, 
                                                    {"PEN", "S/."}, 
                                                    {"PHP", "PhP"}, 
                                                    {"PKR", "Rs"}, 
                                                    {"PLN", "zł"}, 
                                                    {"PYG", "Gs"}, 
                                                    {"QAR", "ر.ق.‏ "},
                                                    {"RON", "lei"}, 
                                                    {"RSD", "Din."}, 
                                                    {"RUB", "р."}, 
                                                    {"RWF", "RWF"}, 
                                                    {"SAR", "ر.س.‏ "},
                                                    {"SEK", "kr"}, 
                                                    {"SGD", "$"}, 
                                                    {"SYP", "ل.س.‏ "},
                                                    {"THB", "฿"}, 
                                                    {"TJS", "т.р."}, 
                                                    {"TMT", "m."}, 
                                                    {"TND", "د.ت.‏ "},
                                                    {"TRY", "TL"}, 
                                                    {"TTD", "TT$"}, 
                                                    {"TWD", "NT$"}, 
                                                    {"UAH", "₴"}, 
                                                    {"USD", "$"}, 
                                                    {"UYU", "$U"}, 
                                                    {"UZS", "so'm"}, 
                                                    {"VEF", "Bs. F."}, 
                                                    {"VND", "₫"}, 
                                                    {"XOF", "XOF"}, 
                                                    {"YER", "ر.ي.‏ "},
                                                    {"ZAR", "R"}, 
                                                    {"ZWL", "Z$"} };
}
6
Marius Bughiu

Die RegionInfo-Klasse verfügt über eine CurrencySymbol-Eigenschaft , sodass sie in C # ausgeführt werden kann. Sie können möglicherweise eine gespeicherte C # -Prozedur verwenden, wenn Sie dies in SQL Server durchführen möchten.

RegionInfo regionInfo = new RegionInfo("GB");
Console.WriteLine(regionInfo.CurrencySymbol); // £

(Sie müssen die ISO-Ländercodes verwenden.)

6
stuartd

Versuchen Sie diesen Code. Geben Sie 'USD' als CurrencyCode und alle anderen ein.

public string getCurrencySymbol(string CurrencyCode)    
{
        string symbol = string.Empty;
        CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.SpecificCultures);
        IList Result = new ArrayList();
        foreach (CultureInfo ci in cultures)
        {
            RegionInfo ri = new RegionInfo(ci.LCID);
            if (ri.ISOCurrencySymbol == CurrencyCode)
            {
                symbol = ri.CurrencySymbol;
                return symbol;
            }
        }
        return symbol;

    }
3

Mit Hilfe dieses Threads habe ich eine kurze String-Erweiterungsmethode erstellt

public static string ToCurrencySymbol(this string ISOCurrency)
{            
    RegionInfo region = CultureInfo.GetCultures(CultureTypes.SpecificCultures).Select(x => new RegionInfo(x.LCID)).FirstOrDefault(p => p.ISOCurrencySymbol == ISOCurrency);
    return region?.ISOCurrencySymbol ?? ISOCurrency;
}
0
artzuk

Mit dieser Antwort wird der Code von @ spender mit einem geringfügigen Tweak in eine Dienstprogrammklasse aufgenommen, die versucht, dreistellige ISO-Währungscodes in ihre derzeit in Umlauf befindlichen Symbole zu konvertieren. Aus Effizienzgründen verwendet diese Klasse einen internen Cache aller vorherigen Anforderungen, der auch von @spender vorgeschlagen wird.

public static class CurrencySymbolMapper {
    /// <summary>An internal cache of previously looked up currencies.</summary>
    private static Dictionary<string, string> _currencySymbolsCache =
        new Dictionary<string, string> (StringComparer.CurrentCultureIgnoreCase);

    public static string TryGetCurrencySymbol(string threeLetterISOAlphabeticCode) {
        // TODO: Enhance to get rid of the silent exception that gets thrown when constructing a new RegionInfo(CultureInfo.LCID) temporary object

        if (threeLetterISOAlphabeticCode.Length != 3) return string.Empty;
        if (_currencySymbolsCache.ContainsKey(threeLetterISOAlphabeticCode))
            return _currencySymbolsCache[threeLetterISOAlphabeticCode];

        string currencySymbolSearchResult = string.Empty;
        try {
            currencySymbolSearchResult =
                CultureInfo.GetCultures(CultureTypes.AllCultures)
                            .Where(c => !c.IsNeutralCulture)
                            .Select(culture => {
                                try { return new RegionInfo(culture.LCID); }
                                catch { return null; } // Ignore this error, but enhance future implementation to get ride of this silent exception
                            })
                            .Where(ri => ri != null && string.Equals(ri.ISOCurrencySymbol, threeLetterISOAlphabeticCode, StringComparison.OrdinalIgnoreCase))
                            .Select(ri => ri.CurrencySymbol)
                            .FirstOrDefault();
        }
        catch (Exception e) {
            // TODO: Handle error
        }

        if (currencySymbolSearchResult == null) currencySymbolSearchResult = string.Empty;

        // Saves both valid and invalid search results, just in case users hammer this method with 
        // the same invalid request many times
        _currencySymbolsCache.Add(threeLetterISOAlphabeticCode, currencySymbolSearchResult);
        return currencySymbolSearchResult;
    }
}
0
Zaid
public static string GetCurrencySymbol(string code)  
{  
 System.Globalization.RegionInfo regionInfo = (from culture in System.Globalization.CultureInfo.GetCultures(System.Globalization.CultureTypes.InstalledWin32Cultures)  
              where culture.Name.Length > 0 && !culture.IsNeutralCulture  
              let region = new System.Globalization.RegionInfo(culture.LCID)  
              where String.Equals(region.ISOCurrencySymbol, code, StringComparison.InvariantCultureIgnoreCase)  
              select region).First();  

 return regionInfo.CurrencySymbol;  
}
0