显示的货币格式

时间:2011-01-30 10:18:21

标签: c# .net asp.net globalization currency

是否有用于格式化某个国家/地区的正确货币代表的库?

实施例 英国 - 127.54英镑 荷兰€127,54- 美国$ 127.54

等。

有些事情要考虑,

  1. 货币符号

  2. 货币符号展示位置 - 可以 在...之前或之后 位数。

  3. 负数量显示

7 个答案:

答案 0 :(得分:81)

尝试Currency Format Specifier(“C”)。它会自动考虑当前的UI文化并相应地显示货币值。

您可以将其与String.Format或重载的ToString方法一起用于数字类型。

例如:

double value = 12345.6789;
Console.WriteLine(value.ToString("C", CultureInfo.CurrentCulture));

Console.WriteLine(value.ToString("C3", CultureInfo.CurrentCulture));

Console.WriteLine(value.ToString("C3", CultureInfo.CreateSpecificCulture("da-DK")));

// The example displays the following output on a system whose
// current culture is English (United States):
//       $12,345.68
//       $12,345.679
//       kr 12.345,679

答案 1 :(得分:28)

内置了这种功能。

使用小数时,您可以使用format string“C”或“c”。

decimal dec = 123.00M;
string uk = dec.ToString("C", new CultureInfo("en-GB")); // uk holds "£123.00"
string us = dec.ToString("C", new CultureInfo("en-US")); // us holds "$123.00"

答案 2 :(得分:17)

您可以使用string.Format("{0:c}", value)

另见:

答案 3 :(得分:5)

获取给定数字并使用.ToString(“C”,culture)显示它的问题在于它有效地将金额更改为给定文化的默认货币。如果您有一个给定的金额,该金额的ISO货币代码,并且您希望为给定的文化显示它,我建议您只创建一个十进制扩展方法,如下所示。这不会自动假设货币是文化的默认货币:

public static string ToFormattedCurrencyString(
    this decimal currencyAmount,
    string isoCurrencyCode,
CultureInfo userCulture)
{
    var userCurrencyCode = new RegionInfo(userCulture.Name).ISOCurrencySymbol;

    if (userCurrencyCode == isoCurrencyCode)
    {
        return currencyAmount.ToString("C", userCulture);
    }

    return string.Format(
        "{0} {1}", 
        isoCurrencyCode, 
        currencyAmount.ToString("N2", userCulture));
}

这将使用本地货币符号或ISO货币代码与金额 - 以更合适的为准。有关in this blog post主题的更多信息。

答案 4 :(得分:2)

此代码 - (将货币设置为GB(英国/英国/英格兰/英镑)然后打印一行。然后将货币设置为US / $并打印一行)

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB",false);         
Console.WriteLine("bbbbbbb   {0:c}",4321.2);
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US",false);
Console.WriteLine("bbbbbbb   {0:c}",4321.2);

将显示 -

bbbbbbb   £4,321.20
bbbbbbb   $4,321.20

有关文化名称的列表,例如en-GB en-US e.t.c.
http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo(v=vs.80).aspx

答案 5 :(得分:1)

如果只有货币符号和小数位数,则可以使用以下帮助器功能,该功能尊重符号/金额顺序,分隔符等,仅更改货币符号本身和要显示的小数位数

public static string FormatCurrency(string currencySymbol, Decimal currency, int decPlaces)
{
    NumberFormatInfo localFormat = (NumberFormatInfo)NumberFormatInfo.CurrentInfo.Clone();
    localFormat.CurrencySymbol = currencySymbol;
    localFormat.CurrencyDecimalDigits = decPlaces;
    return currency.ToString("c", localFormat);
}

答案 6 :(得分:-4)

public static string ToFormattedCurrencyString(
    this decimal currencyAmount,
    string isoCurrencyCode,
    CultureInfo userCulture)
{
    var userCurrencyCode = new RegionInfo(userCulture.Name).ISOCurrencySymbol;

if (userCurrencyCode == isoCurrencyCode)
{
    return currencyAmount.ToString("C", userCulture);
}

return string.Format(
    "{0} {1}", 
    isoCurrencyCode, 
    currencyAmount.ToString("N2", userCulture));

}