Формат валюты для отображения - PullRequest
44 голосов
/ 30 января 2011

Есть ли библиотека для форматирования правильного представления валюты для страны?

Пример Великобритания - £ 127,54 Нидерланды € 127,54- США $ 127,54

и т.д ..

Что нужно учесть,

  1. Символ валюты

  2. Размещение символа валюты - Может быть или место до или после цифры.

  3. Отображение отрицательной суммы

Ответы [ 7 ]

83 голосов
/ 30 января 2011

Попробуйте Спецификатор формата валюты ("C"). Он автоматически учитывает текущую культуру пользовательского интерфейса и отображает значения валют соответственно.

Вы можете использовать его с 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
28 голосов
/ 30 января 2011

Встроенные функции этого типа.

При использовании десятичной дроби вы можете использовать строку формата "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"
17 голосов
/ 30 января 2011

Вы можете использовать string.Format("{0:c}", value).

Смотрите также здесь:

5 голосов
/ 14 августа 2015

Проблема с взятием заданного числа и его отображением с помощью .ToString («C», культура) заключается в том, что он эффективно меняет сумму на валюту по умолчанию для данной культуры. Если у вас есть заданная сумма, код валюты 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));
}

При этом будет использоваться символ местной валюты или код валюты ИСО с суммой - в зависимости от того, что больше подходит. Подробнее по теме в этом блоге .

2 голосов
/ 19 апреля 2014

Этот код- (устанавливает валюту в ГБ (Великобритания / Великобритания / Англия / £), затем печатает строку. Затем устанавливает валюту в 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 и т. Д.
http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo(v=vs.80).aspx

1 голос
/ 28 августа 2018

Если у вас есть только символ валюты и количество десятичных знаков, вы можете использовать следующую вспомогательную функцию, которая учитывает порядок следования символов / сумм, разделители и т. Д., Изменяя только сам символ валюты и количество отображаемых десятичных знаков.к.

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);
}
0 голосов
/ 20 мая 2017
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));

}

...