自定义货币格式
问题描述:
我有一个函数:自定义货币格式
string FormatCurrency(string currencyCode, decimal amount)
例子:
Input: "USD", 1230.56
Output: "USD 1,230.56"
Input: "USD", 1230.00
Output: "USD 1,230"
Input: "VND", 1200000
Output: "1.200.000 VND"
我想参加文化格式(与代码,而不是符号)和自定义格式(“#,# ###“)。 我该如何执行? 感谢
我的代码,我在网上看到:
CultureInfo culture = (from c in CultureInfo.GetCultures(CultureTypes.SpecificCultures)
let r = new RegionInfo(c.LCID)
where r != null
&& r.ISOCurrencySymbol.ToUpper() == currencyCode.ToUpper()
select c).FirstOrDefault();
if (culture == null)
{
return amount.ToString("#,##.##");
}
return string.Format(culture, "{0:C2}", amount);
,但输出为 “1,200.00 $”。我预期的结果是“USD 1200”
答
一个有点hackish,但你可以这样做:
CultureInfo culture = (from c in CultureInfo.GetCultures(CultureTypes.SpecificCultures)
let r = new RegionInfo(c.LCID)
where r != null
&& r.ISOCurrencySymbol.ToUpper() == currencyCode.ToUpper()
select c).FirstOrDefault();
if(culture == null)
{
// fall back to current culture if none is found
// you could throw an exception here if that's not supposed to happen
culture = CultureInfo.CurrentCulture;
}
culture = (CultureInfo)culture.Clone();
culture.NumberFormat.CurrencySymbol = currencyCode;
// Add spaces between the figure and the currency code
culture.NumberFormat.CurrencyPositivePattern = culture.NumberFormat.CurrencyPositivePattern == 0 ? 2 : 3;
var cnp = culture.NumberFormat.CurrencyNegativePattern;
switch(cnp)
{
case 0: cnp = 14; break;
case 1: cnp = 9; break;
case 2: cnp = 12; break;
case 3: cnp = 11; break;
case 4: cnp = 15; break;
case 5: cnp = 8; break;
case 6: cnp = 13; break;
case 7: cnp = 10; break;
}
culture.NumberFormat.CurrencyNegativePattern = cnp;
return amount.ToString("C" + ((amount % 1) == 0?"0":"2"), culture);
小提琴这里:https://dotnetfiddle.net/30f7u3
为:
FormatCurrency("USD", 1230.56M);
FormatCurrency("USD", 1230.00M);
FormatCurrency("VND", 1200000M);
我得到:
USD 1,230.56
USD 1,230
1.200.000 VND
答
有点难看,但财产以后这样可能会工作,除非你决定使用培养中使用货币格式,文化和货币格式
var output = String.Format ("{0} {1:### ### ##0.00}",currencyCode,amount)
var output = amount.ToString ("C");
答
我希望这会帮助你。如果我理解正确,你想把所有东西都显示为当前的文化,只是你想改变货币的显示方式。
这是基础知识,你可以自己继续。
CultureInfo culture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
culture.NumberFormat.CurrencySymbol = currencyCode;
culture.NumberFormat.CurrencyPositivePattern = 2;
return string.Format(culture, "{0:C2}", amount);
结果对我来说是42,55美元。
你能请把你的代码,你h ave试过这个.. – SarangK
我刚更新了,请检查! ^^ – Danie