Formato de moneda para visualización

¿Hay una biblioteca para formatear la representación de moneda correcta para un país?

Ejemplo UK – £ 127.54 Holanda € 127,54 – USA $ 127.54

etc.

Algunas cosas a considerar,

  1. Símbolo de moneda

  2. Colocación del símbolo de moneda: puede colocarse antes o después de los dígitos.

  3. Visualización de cantidad negativa

Pruebe el especificador de formato de moneda (“C”). Toma automáticamente en cuenta la cultura de UI actual y muestra los valores de moneda en consecuencia.

Puede usarlo con String.Format o con el método ToString sobrecargado para un tipo numérico.

Por ejemplo:

 double value = 12345.6789; Console.WriteLine(value.ToString("C", CultureInfo.CurrentCulture)); Console.WriteLine(value.ToString("C3", CultureInfo.CurrentCulture)); Console.WriteLine(value.ToString("C3", CultureInfo.CreateSpecificCulture("da-DK"))); // The example displays the following output on a system whose // current culture is English (United States): // $12,345.68 // $12,345.679 // kr 12.345,679 

Este tipo de funcionalidad está integrada.

Al usar un decimal, puede usar una cadena de formato “C” o “c”.

 decimal dec = 123.00M; string uk = dec.ToString("C", new CultureInfo("en-GB")); // uk holds "£123.00" string us = dec.ToString("C", new CultureInfo("en-US")); // us holds "$123.00" 

Puede usar string.Format("{0:c}", value) .

Ver también aquí:

  • Formato de moneda en .NET Framework

El problema de tomar un número determinado y mostrarlo con .ToString (“C”, cultura) es que efectivamente cambia la cantidad a la moneda predeterminada de la cultura determinada. 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 supondrá automáticamente que la moneda está en la moneda predeterminada 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 usará el símbolo de moneda local o el código de moneda ISO con la cantidad, lo que sea más apropiado. Más sobre el tema en esta publicación de blog .

Este código- (establece la moneda en GB (Gran Bretaña / Reino Unido / Inglaterra / £) y luego imprime una línea. Luego establece la moneda en US $ e imprime una línea)

 Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB",false); Console.WriteLine("bbbbbbb {0:c}",4321.2); Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US",false); Console.WriteLine("bbbbbbb {0:c}",4321.2); 

Mostrará-

 bbbbbbb £4,321.20 bbbbbbb $4,321.20 

Para obtener una lista de nombres de culturas, por ejemplo, en-GB en-US, etc.
http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo(v=vs.80).aspx

Si solo tiene el símbolo de moneda y el número de decimales, puede usar la siguiente función auxiliar, que respeta el orden de símbolo / cantidad, separadores, etc., solo cambiando el símbolo de moneda en sí y el número de decimales para mostrar.

 public static string FormatCurrency(string currencySymbol, Decimal currency, int decPlaces) { NumberFormatInfo localFormat = (NumberFormatInfo)NumberFormatInfo.CurrentInfo.Clone(); localFormat.CurrencySymbol = currencySymbol; localFormat.CurrencyDecimalDigits = decPlaces; return currency.ToString("c", localFormat); } 
 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)); 

}