using System.Collections.Generic;
using System.Globalization;
private static Dictionary<string, RegionInfo> regionCache = new Dictionary<string, RegionInfo>();
public static void Main()
var res = GetCurrencyInfo("BRL");
decimal value = 1234.56m;
string formattedValue = res.FormatCurrency(value);
Console.WriteLine("CurrencySymbol: " + res.CurrencySymbol);
Console.WriteLine("CurrencyDecimalSeparator: " + res.CurrencyDecimalSeperator);
Console.WriteLine("CurrencyGroupSeparator: " + res.CurrencyGroupSeparator);
Console.WriteLine("CurrencyPositivePattern: " + res.CurrencyPositivePattern);
Console.WriteLine("FormattedValue: " + formattedValue);
public static CurrencyInfo GetCurrencyInfo(string currencyCode)
CurrencyInfo currencyInfo = new CurrencyInfo();
RegionInfo region = FindRegionByCurrencyCode(currencyCode);
CultureInfo culture = CultureInfo.CreateSpecificCulture(region.Name);
currencyInfo.CurrencySymbol = culture.NumberFormat.CurrencySymbol;
currencyInfo.CurrencyDecimalSeperator = culture.NumberFormat.CurrencyDecimalSeparator;
currencyInfo.CurrencyDecimalDigits = culture.NumberFormat.CurrencyDecimalDigits;
currencyInfo.CurrencyPositivePattern = culture.NumberFormat.CurrencyPositivePattern;
currencyInfo.CurrencyGroupSeparator = culture.NumberFormat.CurrencyGroupSeparator;
currencyInfo.CultureInfo = culture;
public static RegionInfo FindRegionByCurrencyCode(string currencyCode)
foreach (CultureInfo culture in CultureInfo.GetCultures(CultureTypes.SpecificCultures))
RegionInfo region = new RegionInfo(culture.Name);
if (region.ISOCurrencySymbol == currencyCode)
regionCache[currencyCode] = region;
public class CurrencyInfo
public string CurrencySymbol { get; set; }
public string CurrencyDecimalSeperator { get; set; }
public int CurrencyDecimalDigits { get; set; }
public int CurrencyPositivePattern { get; set; }
public string CurrencyGroupSeparator { get; set; }
public CultureInfo CultureInfo { get; set; }
public string FormatCurrency(decimal value)
return string.Format(CultureInfo, "{0:C}", value);