using System.Globalization;
public static string FormatCurrency(string currencyCode, decimal amount)
CultureInfo culture = (from c in CultureInfo.GetCultures(CultureTypes.SpecificCultures)
let r = new RegionInfo(c.LCID)
&& r.ISOCurrencySymbol.ToUpper() == currencyCode.ToUpper()
select c).FirstOrDefault();
culture = CultureInfo.CurrentCulture;
culture = (CultureInfo)culture.Clone();
culture.NumberFormat.CurrencySymbol = currencyCode;
culture.NumberFormat.CurrencyPositivePattern = culture.NumberFormat.CurrencyPositivePattern == 0 ? 2 : 3;
var cnp = culture.NumberFormat.CurrencyNegativePattern;
culture.NumberFormat.CurrencyNegativePattern = cnp;
return amount.ToString("C" + ((amount % 1) == 0?"0":"2"), culture);
public static void Main()
Console.WriteLine(FormatCurrency("USD", 1230.56M));
Console.WriteLine(FormatCurrency("USD", 1230.00M));
Console.WriteLine(FormatCurrency("VND", 1200000M));