web-dev-qa-db-fra.com

Mettre en forme une double valeur comme monnaie mais sans le symbole monétaire (C #)

Je nourris une zone de texte une valeur de chaîne me montrant une balance qui doit être formatée comme ceci:

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

Je pourrais utiliser la valeur.ToString ("c"), mais cela placerait le signe de la devise devant.

Avez-vous une idée de la manière dont je manipulerais la chaîne avant d'alimenter la zone de texte pour obtenir le formatage ci-dessus?

J'ai essayé cela sans succès: 

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

Merci beaucoup,

48
Houman
string forDisplay = currentBalance.ToString("N2");
54
LukeH

Si le format de devise vous donne exactement ce que vous voulez, clonez une NumberFormatInfo avec et définissez la propriété CurrencySymbol sur "". Vous devez bien sûr vérifier qu'il gère les nombres négatifs comme vous le souhaitez.

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 - cela dépend si vous voulez vraiment refléter exactement l’aspect d’une devise, sans le symbole, ou contrôler le positionnement exact des chiffres.

61
Jon Skeet

As-tu essayé:

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

Ceci est l'équivalent main longue de:

currentBalance.ToString("N2");
8
Garry Shutler

string result = string.Format ("{0: N2}", valeur); // Pour un résultat comme ### ### ##. ##

5
webKite

Vous pouvez le faire avec le séparateur de groupe et le séparateur de section , comme ceci:

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

Cela ne tient pas compte des écarts de culture comme le ferait la réponse de @JonSkeet, mais cela imite la décimale, l’arrondi, la séparation des milliers et la gestion des nombres négatifs produits par le format de devise culturelle en-US en utilisant une seule chaîne de format personnalisé.

Démo .NET Fiddle

3
Jordan Parker
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
2
Prasanna

Cette solution simple fonctionne pour moi avec la devise américaine. 

Si vous n’avez pas besoin du support des devises internationales, utilisez ceci et remplacez le symbole $ par le ou les symboles monétaires à supprimer:

// for USD
string result = currentBalance.ToString("C").Replace("$", "")

ou 

// for EUR
string result = currentBalance.ToString("C").Replace("€", "")
0
Taylor Brown

C'est peut-être exagéré, mais cela arrondit, formats ...

@helper TwoDecimalPlaces(decimal? val)
{
    decimal x = 0;
    decimal y = 0;
    string clas = "text-danger";
    if (val.HasValue)
    {
        x = (decimal)val;
        if (val > 0)
        {
            clas = "";
        }
    }
    y = System.Math.Round(x, 2);
    IFormatProvider formatProvider = new System.Globalization.CultureInfo(string.Empty);
    <span class="@clas">@string.Format("{0:N2}", y)</span>
}
0
HerGiz