Existe-t-il une bibliothèque pour formater la bonne devise pour un pays?
Exemple: Royaume-Uni - 127,54 £
etc..
Quelques points à considérer
Symbole de la monnaie
Positionnement du symbole monétaire - Il peutêtre placé avant ou après les chiffres
Affichage de montant négatif
Essayez le spécificateur de format devise ("C"). Il prend automatiquement en compte la culture actuelle de l'interface utilisateur et affiche les valeurs monétaires en conséquence.
Vous pouvez l'utiliser avec String.Format
ou la méthode ToString
surchargée pour un type numérique.
Par exemple:
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
Ce type de fonctionnalité est intégré.
Lorsque vous utilisez une décimale, vous pouvez utiliser une chaîne format "C" ou "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"
Vous pouvez utiliser string.Format("{0:c}", value)
.
Voir aussi ici:
Le problème avec prendre un nombre donné et l'afficher avec .ToString ("C", culture) est que cela change effectivement le montant dans la devise par défaut de la culture donnée. Si vous avez un montant donné, le code de devise ISO de ce montant et que vous souhaitez l'afficher pour une culture donnée, je vous recommande de créer simplement 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));
}
Cela utilisera soit le symbole de la devise locale, soit le code de devise ISO avec le montant - selon ce qui est le plus approprié. Plus sur le sujet dans cet article de blog .
Ce code- (définit la devise sur GB (Grande-Bretagne/Royaume-Uni/Angleterre/£) puis imprime une ligne. Définit ensuite la devise sur US/$ et imprime une ligne)
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);
Affichera-
bbbbbbb £4,321.20
bbbbbbb $4,321.20
Pour une liste de noms de culture, par exemple en-GB en-US e.t.c.
http://msdn.Microsoft.com/en-us/library/system.globalization.cultureinfo(v=80s.aspx
Si vous ne disposez que du symbole monétaire et du nombre de décimales, vous pouvez utiliser la fonction d'assistance suivante, qui respecte l'ordre symbole/montant, les séparateurs, etc., en modifiant uniquement le symbole monétaire et le nombre de décimales à afficher.
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);
}