58 votes

Formater une valeur double comme une devise mais sans le signe de la devise (C#)

J'alimente une zone de texte avec une valeur de chaîne qui m'indique un solde qui doit être formaté comme ceci :

###,###,###,##0.00

Je pourrais utiliser value.ToString("c"), mais cela mettrait le signe monétaire devant.

Avez-vous une idée de la façon dont je pourrais manipuler la chaîne de caractères avant d'alimenter la zone de texte pour obtenir le formatage ci-dessus ?

J'ai essayé, sans succès :

String.Format("###,###,###,##0.00", currentBalance);

Merci beaucoup,

72voto

Jon Skeet Points 692016

Si le formatage de la devise vous donne exactement ce que vous voulez, clonez une NumberFormatInfo avec et définir le CurrencySymbol en "". Vous devez vérifier que les nombres négatifs sont traités comme vous le souhaitez, bien sûr.

Par exemple :

using System;
using System.Globalization;

class Test
{
    static void Main()
    {
        NumberFormatInfo nfi = CultureInfo.CurrentCulture.NumberFormat;
        nfi = (NumberFormatInfo) nfi.Clone();

        Console.WriteLine(string.Format(nfi, "{0:c}", 123.45m));
        nfi.CurrencySymbol = "";
        Console.WriteLine(string.Format(nfi, "{0:c}", 123.45m));
    }
}

L'autre option consiste bien sûr à utiliser une chaîne de format numérique personnalisée. Tout dépend si vous souhaitez vraiment reproduire exactement l'aspect d'une monnaie, sans le symbole, ou contrôler le positionnement exact des chiffres.

67voto

LukeH Points 110965
string forDisplay = currentBalance.ToString("N2");

11voto

Garry Shutler Points 20898

Avez-vous essayé :

currentBalance.ToString("#,##0.00");

C'est l'équivalent à main longue de :

currentBalance.ToString("N2");

5voto

webKite Points 143

string result=string.Format("{0:N2}", value) ; //For result like ### ### ###.###

2voto

Prasanna Points 21
CultureInfo cultureInfo = new CultureInfo("en-US");
cultureInfo.NumberFormat.CurrencySymbol = "Rs.";

Thread.CurrentThread.CurrentCulture = cultureInfo;
decimal devimalValue = 3.45M;
this.Text = devimalValue.ToString("C2"); //Rs.3.45

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