web-dev-qa-db-de.com

c # Dezimal in Zeichenfolge für Währung

Um eine Währung anzuzeigen, machen wir:

ToString("0.##")

Für den Wert 5.00 lautet die Ausgabe:

5

Für den Wert 5.98 lautet die Ausgabe:

5.98

Für den Wert 5.90 lautet die Ausgabe:

5.9

Ich brauche den dritten Fall, um 2 Dezimalpunkte zu erhalten, zB:

5.90

Wie kann ich das tun, ohne die anderen Ergebnisse zu beeinflussen? 

15
Tom Gullen

Ich weiß, das gibt Ihnen kein Format, das das Problem löst, aber es ist eine einfache Lösung, um es zu umgehen.

(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

Versuchen:

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

Oder nur:

s.ToString("C")

Ich kenne keinen integrierten Weg, um alle zwei Dezimalstellen nur dann auszudehnen, wenn beide nicht Null sind. Würde wahrscheinlich nur eine if-Anweisung dafür verwenden.

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

Sie können eine Erweiterungsmethode verwenden, etwa wie folgt:

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

# bedeutet, wenn keine Nummer vorhanden ist, lassen Sie das Feld leer. 0 bedeutet, eine 0 eingeben, wenn keine Nummer vorhanden ist 

ToString ("0,00")

7
ahaliav fox

Ich bin mir nicht sicher, ob mir etwas fehlt, aber Sie können dies nicht einfach tun:

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