Le problème lorsqu'on prend un nombre donné et qu'on l'affiche avec .ToString("C", culture), c'est que le montant est effectivement converti dans la devise par défaut de la culture donnée. Si vous disposez d'un montant donné, du code monétaire ISO de ce montant, et que vous souhaitez l'afficher pour une culture donnée, je vous recommande de créer une méthode d'extension décimale comme celle ci-dessous. Cela ne supposera pas automatiquement que la devise est dans la devise par défaut de la culture :
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));
}
Il utilisera soit le symbole de la monnaie locale, soit le code monétaire ISO avec le montant, selon ce qui est le plus approprié. Plus d'informations sur le sujet dans cet article de blog .