Мне нужно отформатировать сумму в любой валюте, чтобы она выглядела как ожидаемая в текущей культуре.Формат любой валюты и суммы для текущей культуры (не культура валюты)
К примеру, в Великобритании культуре (ан-ГБ) можно было бы ожидать, чтобы увидеть следующее:
£ 1,00 $ 1,00 € 1,00
И в немецкой культуре, одни и те же валютные суммы должны выглядеть следующим образом:
1,00 £ 1,00 $ 1,00 €
Я нашел способ (ниже), который форматирует валюту/количество в соответствии с формат культуры, связанной с валютой (например, £ 1,00, 1,00 €), но это не совсем правильно, так как кто-то из Великобритании ожидал бы увидеть € 1,00, хотя евро не является валютой, связанной с en-GB.
public static string FormatCurrency(this decimal amount, string currencyCode)
{
var 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("0.00");
return string.Format(culture, "{0:C}", amount);
}
Может ли кто-либо предоставить или описать способ просмотра суммы в любой валюте в соответствии с текущей культурой?
Я принял это решение, поскольку оно приемлемо для моего использования. Одно из предостережений заключается в том, что для конкретной культуры символы валюты могут отображаться до или после суммы, например. £ 1,00, но 100 kr (шведская крона). Однако, похоже, что kr 100 не будет неприемлемым для британского пользователя. –
Интересно. Не уверен, что «kr100» является неприемлемым (1,00 долл. США и 1,00 евро 1,00, безусловно, правильные), но если это так, то это ограничение форматирования языка. Формат валюты указывает, где символ (до/после), а также то, что означает десятичная точка и тысячи разделителей, но это одноразмерная вещь. Предполагается, что все валюты имеют одинаковое место размещения. – Clafou
На самом деле я сказал, что kr100 не будет неприемлемым, то есть это приемлемо. Извинения за запутанную формулировку. И я согласен –