3数字货币代码到货币符号

Sac*_*nth 45 .net c# currency sql-server-2008

在C#中,有可能从3个字符的货币代码中获得货币符号,例如"£",在这种情况下是"GBP"吗?

这可能在SQL Server或C#中吗?

spe*_*der 75

虽然有点蛮力但不是特别优雅,你可以这样做:

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;
}
Run Code Online (Sandbox Code Playgroud)

并按如下方式使用:

string currSymbol;
if(TryGetCurrencySymbol("GBP",out currSymbol))
{
    Console.WriteLine("symbol is {0}", currSymbol);
}
Run Code Online (Sandbox Code Playgroud)

如果您预计会采用这种方法,可能最好先建立一个缓存:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

在撰写本文时,在我的机器等等上,地图包含以下映射:

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
Run Code Online (Sandbox Code Playgroud)


ver*_*ald 39

.NET有 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); // €
Run Code Online (Sandbox Code Playgroud)

但这需要文化名称,而不是"GBP".据我所知,它不可能直接来自"GBP"等等.

通过RegionInfo货币代码也可以获得相同的信息:

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
Run Code Online (Sandbox Code Playgroud)

我想可以想象一下,可以使用它来构建从ISO代码到符号的地图.

文化名称列表在这里是可用的.

编辑:这似乎工作:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

CurrencyCodeMapper.GetSymbol("USD") // $
CurrencyCodeMapper.GetSymbol("GBP") // £
CurrencyCodeMapper.GetSymbol("EUR") // €
Run Code Online (Sandbox Code Playgroud)

当然,请注意,这不会产生全面的列表.特别是,它不包括已被欧元取代的旧欧元区货币.我无法看到任何解决方法,但如果您需要,可以手动添加此类货币,例如SymbolsByCode.Add("FRF", "?");法国法郎.

  • 我收到“ArgumentException:自定义区域性不能通过 LCID 传递,只能通过名称传递。参数名称:区域性”。简单的解决方法是将“.LCID”替换为“.Name”。似乎有效。 (3认同)

小智 7

试试这个代码。输入“USD”作为货币代码和所有其他代码。

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;

    }
Run Code Online (Sandbox Code Playgroud)


stu*_*rtd 6

RegionInfo类有一个CurrencySymbol属性,所以它在C#中是可行的.如果您想在Sql Server中执行此操作,则可以使用C#存储过程.

RegionInfo regionInfo = new RegionInfo("GB");
Console.WriteLine(regionInfo.CurrencySymbol); // £
Run Code Online (Sandbox Code Playgroud)

(您需要使用ISO国家/地区代码)


Mar*_*hiu 6

这在Windows Phone应用程序CultureInfo.GetCultures上不起作用,因为平台上没有(至少现在还没有).因此,这是一个快速而肮脏的解决方案 - 在费用者的答案的帮助下制作,其中包含当日的所有文化代码和货币.

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$"} };
}
Run Code Online (Sandbox Code Playgroud)