web-dev-qa-db-fra.com

c # Décimal en chaîne pour devise

Pour afficher une devise, nous faisons:

ToString("0.##")

Pour la valeur 5.00, le résultat est:

5

Pour la valeur 5.98, le résultat est:

5.98

Pour la valeur 5.90, le résultat est:

5.9

J'ai besoin du troisième cas pour sortir avec 2 décimales, par exemple:

5.90

Comment puis-je faire cela sans que cela affecte les autres résultats? 

15
Tom Gullen

Je sais que cela ne vous donne pas un format qui résout le problème, mais c'est une solution simple pour contourner le problème.

(5.00).ToString("0.00").Replace(".00","");  // returns 5
(5.90).ToString("0.00").Replace(".00", ""); // returns 5.90
(5.99).ToString("0.00").Replace(".00", ""); // returns 5.99
17
Zachary

Essayer:

s.ToString("#,##0.00")

Ou juste:

s.ToString("C")

Je ne connais aucun moyen intégré pour développer les deux décimales uniquement lorsque les deux ne sont pas nuls. Nous utiliserions probablement simplement une instruction if pour cela.

int len = s.Length;
if (s[len - 2] == '0' && s[len - 1] == '0')
    s = s.Left(len - 3);
14
Jonathan Wood

Vous pouvez utiliser une méthode d'extension, quelque chose comme ceci:

public static string ToCurrencyString(this decimal d)
{
    decimal t = Decimal.Truncate(d);
    return d.Equals(t) ? d.ToString("0.##") : d.ToString("#, ##0.00")
}
11
Clark

# signifie que s'il n'y a pas de numéro, laissez-le vide 

ToString ("0.00")

7
ahaliav fox

Je ne sais pas si je manque quelque chose, mais vous ne pouvez pas simplement faire ceci

decimal moneyvalue = 1921.39m;
string html = String.Format("Order Total: {0:C}", moneyvalue);
Console.WriteLine(html);
1
gcoleman0828