[英]Custom Currency Format in C#
我有一个功能:
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 1,200”
有点骇人听闻,但您可以执行以下操作:
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
我希望这能帮到您。 如果我理解正确,那么您想将所有内容显示为当前内容,只想更改货币的显示方式。
这是基础知识,您可以自己继续。
CultureInfo culture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
culture.NumberFormat.CurrencySymbol = currencyCode;
culture.NumberFormat.CurrencyPositivePattern = 2;
return string.Format(culture, "{0:C2}", amount);
我得到的结果是42,55美元。
有点难看,但除非您决定使用文化和货币格式,否则类似的东西可能会起作用
var output = String.Format ("{0} {1:### ### ##0.00}",currencyCode,amount)
用于使用文化的货币格式
var output = amount.ToString ("C");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.