Формат валюты для отображения
Есть ли библиотека для форматирования правильной валюты для страны?
Пример
Великобритания - £ 127,54
Нидерланды € 127,54-
США $127,54
и т.д..
Некоторые вещи, которые следует учитывать,
Ответы
Ответ 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"
Ответ 3
Вы можете использовать string.Format("{0:c}", value)
.
См. также здесь:
Ответ 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));
}