Подтвердить что ты не робот

Формат валюты для отображения

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

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

и т.д..

Некоторые вещи, которые следует учитывать,

  • Символ валюты

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

  • Отображение отрицательных значений

4b9b3361

Ответ 1

Попробуйте Спецификатор формата валюты ( "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

Ответ 2

Эта функциональность встроена.

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

Ответ 4

Проблема с принятием заданного числа и отображением его с помощью .ToString( "C", культура) заключается в том, что он эффективно изменяет сумму на валюту по умолчанию данной культуры. Если у вас есть заданная сумма, код валюты ИСО этой суммы и вы хотите отобразить ее для данной культуры, я бы рекомендовал просто создать метод расширения с десятичной точкой, как показано ниже. Это не будет автоматически предполагать, что валюта находится в валюте по умолчанию культуры:

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 с суммой - в зависимости от того, что более подходит. Подробнее о теме в этом сообщении в блоге.

Ответ 5

Этот код (устанавливает валюту в 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

Список имен культур, например. ru-ru en-US e.t.c.
http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo(v = vs .80).aspx

Ответ 6

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));

}