Проблема с взятием заданного числа и его отображением с помощью .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));
}
При этом будет использоваться символ местной валюты или код валюты ИСО с суммой - в зависимости от того, что больше подходит. Подробнее по теме в этом блоге .