El problema con la toma de un número dado y se presentan con .ToString ("C", cultura) es que cambia efectivamente la cantidad a la moneda por defecto de la cultura dada. Si tiene un monto determinado, el código de moneda ISO de esa cantidad, y desea mostrarlo para una cultura determinada, le recomendaría simplemente crear un método de extensión decimal como el siguiente. Esto no asuma automáticamente que la moneda está en la moneda base de la cultura:
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));
}
Esto ya sea utilizar el símbolo de moneda local o el código de moneda ISO con la cantidad - lo que es más apropiado.Más sobre el tema in this blog post.
Una pequeña nota para futuros lectores, los decimales son el tipo preferido de valores de moneda. Consulte esta respuesta de Zneak para obtener más detalles: https://stackoverflow.com/a/3730040/2573109 –