web-dev-qa-db-fra.com

Format de devise pour l'affichage

Existe-t-il une bibliothèque pour formater la bonne devise pour un pays?

Exemple: Royaume-Uni - 127,54 £

etc..

Quelques points à considérer

  1. Symbole de la monnaie

  2. Positionnement du symbole monétaire - Il peutêtre placé avant ou après les chiffres

  3. Affichage de montant négatif

42
001

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
78
Cody Gray

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"
26
Oded

Vous pouvez utiliser string.Format("{0:c}", value).

Voir aussi ici:

17
Martin Buberl

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 .

5
jakejgordon

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

2
barlop

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);
}
1
Clint Good