2012-09-11 7 views
35

सी # में क्या इस मामले में 'जीबीपी' में 3 वर्ण मुद्रा कोड से '£' की तरह मुद्रा चिह्न प्राप्त करना संभव है?3 मुद्रा चिह्न के लिए डिजिट मुद्रा कोड

क्या यह संभवतः SQL सर्वर या C# में संभव है?

+1

आप हमेशा अपनी खुद की विधि –

+1

लिख सकते हैं लेकिन फिर मैं सभी मुद्राओं के लिए एक मानचित्रण बनाने की जरूरत दुनिया। –

+0

'RegionInfo' का उपयोग करके आप आईएसओ 2 वर्ण कोड का उपयोग कर सकते हैं। – Oded

उत्तर

59

एक सा जानवर बल और नहीं विशेष रूप से सुंदर है, आप इसे इस तरह कर सकता है जबकि:

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

और उसका उपयोग इस प्रकार है:

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

आप इस विधि का चोट की आशा है, शायद कैश अप फ्रंट बनाने के लिए बेहतर है:

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

लिखने के समय, मेरे मी पर एचिन इत्यादि। मानचित्र में निम्नलिखित मैपिंग हैं:

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$ 
+1

आप कोड @spender अच्छी तरह से कोड। –

+0

@ स्पेंडर शानदार उत्तर !! – user1799214

+1

@spender, मैं अपने दृष्टिकोण का इस्तेमाल किया और छानने केवल विशिष्ट संस्कृति प्रकार का उपयोग कर आज़माएं/कैच ब्लॉक को हटा दिया है CultureInfo CultureInfo = CultureInfo.GetCultures (CultureTypes.InstalledWin32Cultures | CultureTypes.SpecificCultures)! .FirstOrDefault (ग => c.IsNeutralCulture && सी। एक्वाल्स (CultureInfo.InvariantCulture) && नया RegionInfo (सी.एलसीआईडी)। आईओएसओआरयूआरसीआईएसबीओएल == _currency.IsoLetterCode) ?? CultureInfo.CurrentCulture; –

6

क्षेत्रइन्फो क्लास में CurrencySymbol property है, इसलिए यह सी # में करने योग्य है। यदि आप एसक्यूएल सर्वर में ऐसा करना चाहते हैं तो आप शायद सी # संग्रहीत प्रक्रिया का उपयोग कर सकते हैं।

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

+1

रीजनइन्फो क्लास में आईएसओसीआरआरसी सिंबल भी है जो तीन-अक्षर कोड है। तो यह मेरा सुझाव भी होगा। यह चाल उपलब्ध क्षेत्रों से विशेष आईएसओ मुद्रा कोड के साथ क्षेत्र को कुशलतापूर्वक प्राप्त कर रही है। – KeithS

32

नेट 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); // € 

है (आप ISO country codes उपयोग करने की आवश्यकता) लेकिन इस संस्कृति का नाम, नहीं "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 

मुझे लगता है एक क़यास है कि इस्तेमाल कर सकते हैं एक के निर्माण के लिए आईएसओ कोड से प्रतीक के लिए मानचित्र।

संस्कृति नामों की सूची उपलब्ध here उपलब्ध है।

संपादित करें:

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

उपयोग::

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

नोट, ज़ाहिर है, यह एक व्यापक सूची का उत्पादन नहीं करता है कि खैर यह काम करने लगता है। विशेष रूप से, इसमें पुरानी यूरोजोन मुद्राएं शामिल नहीं हैं जिन्हें यूरो द्वारा हटा दिया गया है। मुझे इसके चारों ओर कोई रास्ता नहीं दिख रहा है, लेकिन यदि आपको उनकी ज़रूरत है तो मैन्युअल रूप से ऐसी मुद्राओं को जोड़ने के लिए, उदाहरण के लिए फ्रेंच फ़्रैंक के लिए SymbolsByCode.Add("FRF", "₣");

+0

यह इस पृष्ठ पर अब तक का सबसे सुंदर जवाब है! निर्माण पर कैशिंग इसे अन्य सभी समाधानों की तुलना में बहुत तेज़ कर देगा, जिसके लिए कई लुकअप की आवश्यकता होती है। – Ian

+1

सर्वश्रेष्ठ उत्तर (संपादन अनुभाग के बाद)! धन्यवाद, verdesmarald! – Hajjat

3

इस कोड को आज़माएं। '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; 

    } 
6

यह विंडोज फोन अनुप्रयोगों पर काम नहीं करेगा के रूप में 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$"} }; 
} 
0

इस उत्तर @ खर्चा करने के कोड डालता है, एक छोटी सी ट्वीक साथ, एक उपयोगिता वर्ग उनके इस समय-घूम प्रतीकों को तीन अक्षर वाले ISO मुद्रा कोड में परिवर्तित करने का प्रयास करता है कि में। दक्षता के लिए, यह वर्ग @ पिछले सभी अनुरोधों के आंतरिक कैश का उपयोग करता है, जिसे @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; 
    } 
} 
0
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
इस सूत्र की मदद से

मैं एक छोटी स्ट्रिंग विस्तार विधि बनाया

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