1

Мне нужно отформатировать сумму в любой валюте, чтобы она выглядела как ожидаемая в текущей культуре.Формат любой валюты и суммы для текущей культуры (не культура валюты)

К примеру, в Великобритании культуре (ан-ГБ) можно было бы ожидать, чтобы увидеть следующее:

£ 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

Для установки текущего символа желаемому (£, $, € или что-то еще), в то же время, используя другие атрибуты текущей культуры, вы можете просто клонировать свой текущий NumberFormatInfo и заменить символ валюты:

var cultureInfo = Thread.CurrentThread.CurrentCulture; 
var numberFormatInfo = (NumberFormatInfo)cultureInfo.NumberFormat.Clone(); 
numberFormatInfo.CurrencySymbol = "€"; // Replace with "$" or "£" or whatever you need 

var price = 12.3m; 
var formattedPrice = price.ToString("C", numberFormatInfo); // Output: "€ 12.30" if the CurrentCulture is "en-US", "12,30 €" if the CurrentCulture is "fr-FR". 
+0

Я принял это решение, поскольку оно приемлемо для моего использования. Одно из предостережений заключается в том, что для конкретной культуры символы валюты могут отображаться до или после суммы, например. £ 1,00, но 100 kr (шведская крона). Однако, похоже, что kr 100 не будет неприемлемым для британского пользователя. –

+0

Интересно. Не уверен, что «kr100» является неприемлемым (1,00 долл. США и 1,00 евро 1,00, безусловно, правильные), но если это так, то это ограничение форматирования языка. Формат валюты указывает, где символ (до/после), а также то, что означает десятичная точка и тысячи разделителей, но это одноразмерная вещь. Предполагается, что все валюты имеют одинаковое место размещения. – Clafou

+0

На самом деле я сказал, что kr100 не будет неприемлемым, то есть это приемлемо. Извинения за запутанную формулировку. И я согласен –

Смежные вопросы