3-cijferige valutacode naar valutasymbool

Is het in C# mogelijk om een ​​valutasymbool, zoals ‘£’, uit de valutacode van 3 tekens te halen, in dit geval ‘GBP’?

Is dit mogelijk in SQL Server of in C#?


Antwoord 1, autoriteit 100%

Hoewel een beetje brute kracht en niet bijzonder elegant, zou je het als volgt kunnen doen:

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

en gebruik het als volgt:

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

Als je verwacht deze methode te gaan gebruiken, is het misschien beter om vooraf een cache te bouwen:

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.Name);
                }
                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);
    }
}

Op het moment van schrijven bevat de kaart op mijn computer enz. enz. de volgende toewijzingen:

AED  د.إ.‏
AFN  ؋
ALL  Lekë
AMD  ֏
ANG  NAf.
AOA  Kz
ARS  $
AUD  $
AWG  Afl.
AZN  ₼
BAM  КМ
BBD  $
BDT  ৳
BGN  лв.
BHD  د.ب.‏
BIF  FBu
BMD  $
BND  $
BOB  Bs
BRL  R$
BSD  $
BTN  Nu.
BWP  P
BYN  Br
BZD  $
CAD  $
CDF  FC
CHF  CHF
CLP  $
CNY  ¥
COP  $
CRC  ₡
CUP  $
CVE  ​
CZK  Kč
DJF  Fdj
DKK  kr.
DOP  $
DZD  د.ج.‏
EGP  ج.م.‏
ERN  Nfk
ETB  Br
EUR  €
FJD  $
FKP  £
GBP  £
GEL  ₾
GHS  GH₵
GIP  £
GMD  D
GNF  FG
GTQ  Q
GYD  $
HKD  $
HNL  L
HRK  kn
HTG  G
HUF  Ft
IDR  Rp
ILS  ₪
INR  ₹
IQD  د.ع.‏
IRR  ريال
ISK  kr
JMD  $
JOD  د.ا.‏
JPY  ¥
KES  Ksh
KGS  сом
KHR  ៛
KMF  CF
KPW  ₩
KRW  ₩
KWD  د.ك.‏
KYD  $
KZT  ₸
LAK  ₭
LBP  ل.ل.‏
LKR  රු.
LRD  $
LYD  د.ل.‏
MAD  د.م.‏
MDL  L
MGA  Ar
MKD  ден
MMK  K
MNT  ₮
MOP  MOP$
MRU  MRU
MUR  Rs
MVR  ރ.
MWK  MK
MXN  $
MYR  RM
MZN  MTn
NAD  $
NGN  ₦
NIO  C$
NOK  kr
NPR  रु
NZD  $
OMR  ر.ع.‏
PAB  B/.
PEN  S/
PGK  K
PHP  ₱
PKR  Rs
PLN  zł
PYG  ₲
QAR  ر.ق.‏
RON  lei
RSD  дин.
RUB  ₽
RWF  RF
SAR  ر.س.‏
SBD  $
SCR  SR
SDG  ج.س.
SEK  kr
SGD  $
SHP  £
SLL  Le
SOS  S
SRD  $
SSP  £
STN  Db
SYP  ل.س.‏
SZL  E
THB  ฿
TJS  смн
TMT  m.
TND  د.ت.‏
TOP  T$
TRY  ₺
TTD  $
TWD  NT$
TZS  TSh
UAH  ₴
UGX  USh
USD  $
UYU  $
UZS  сўм
VES  Bs.S
VND  ₫
VUV  VT
WST  WS$
XAF  FCFA
XCD  EC$
XDR  XDR
XOF  CFA
XPF  FCFP
YER  ر.ي.‏
ZAR  R
ZMW  K

Antwoord 2, autoriteit 48%

.NET heeft 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); // €

Maar hiervoor is de cultuurnaam vereist, niet "GBP". Voor zover ik weet is het niet mogelijk rechtstreeks vanuit "GBP", enz.

Dezelfde informatie is ook beschikbaar via RegionInfo, samen met de valutacode:

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

Ik veronderstel dat je dat zou kunnen gebruiken om een ​​kaart te maken van ISO-code naar symbool.

De lijst met cultuurnamen is hierbeschikbaar.

EDIT:Nou, dit lijkt te werken:

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

Gebruik:

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

Houd er rekening mee dat dit natuurlijk geen volledige lijst oplevert. Het omvat met name geen oude valuta’s van de eurozone die zijn vervangen door de euro. Ik zie geen andere manier om dit te omzeilen dan om dergelijke valuta’s handmatig toe te voegen als je ze nodig hebt, bijvoorbeeld SymbolsByCode.Add("FRF", "₣");voor Franse franken.


Antwoord 3, autoriteit 9%

De klasse RegionInfo heeft een CurrencySymbol-eigenschap, dus het is te doen in C#. Je zou misschien een opgeslagen procedure in C# kunnen gebruiken als je het in Sql Server wilt doen.

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

(Je moet de ISO-landcodesgebruiken)


Antwoord 4, autoriteit 6%

Dit werkt niet op Windows Phone-applicaties omdat CultureInfo.GetCulturesniet beschikbaar is op het platform (althans nog niet). Dus hier is een snelle en vuile oplossing – gemaakt met behulp van het antwoord van de spender met alle cultuurcodes en valuta’s op de datum.

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

Antwoord 5, Autoriteit 4%

Probeer deze code. Voer ‘USD’ in als valutacode en alle andere.

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

Antwoord 6

Met behulp van deze thread heb ik een Short String Extension-methode

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

Antwoord 7

Dit antwoord plaatst @ Spender’s Code, met een kleine tweak, in een hulpprogramma die probeert drie-letterige ISO-valutacodes te converteren naar hun momenteel circulerende symbolen. Voor efficiëntie gebruikt deze klasse een interne cache van alle vorige verzoeken, ook voorgesteld door @Spender.

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

Antwoord 8

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

Antwoord 9

Zo heb ik de . gekregen
DECLARE @CultureCode varchar(10) = ‘en-us’

SELECTEER SUBSTRING(FORMAT(CONVERT(money,0), ‘C’, @CultureCode ),1,1) CurrencySymbol

Other episodes