繁体   English   中英

C#中的自定义货币格式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM