60 votes

Format de la devise à afficher

Existe-t-il un moyen de formater la représentation correcte de la devise pour un pays ?

Exemple ROYAUME-UNI -127,54 £ Pays-Bas € 127,54- USA -127,54

etc.

Quelques éléments à prendre en compte,

  1. Symbole de la monnaie

  2. Placement du symbole de la monnaie -- Il peut être placé avant ou après les chiffres.

  3. Affichage du montant négatif

110voto

Cody Gray Points 102261

Essayez le Spécification du format de la 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 surcharge ToString pour un type numérique.

Par exemple :

decimal value = 12345.6789M; // Be sure to use Decimal for money values. Do not use IEEE-754 types such as float (System.Single) and double (System.Double) as they can only store approximate values.
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

36voto

Oded Points 271275

Ce type de fonctionnalité est intégré.

Lorsque vous utilisez une décimale, vous pouvez utiliser un chaîne de 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"

20voto

Martin Buberl Points 14573

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

Voir aussi ici :

9voto

jakejgordon Points 973

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 .

3voto

barlop Points 766

Ce code : (définit la devise à GB(Britain/UK/England/£) puis imprime une ligne. Puis définit la devise en 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 cultures, par exemple : en-GB en-US e.t.c.
http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo(v=vs.80).aspx

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X