2009-02-12 10 views
13

Ich versuche, String.Format ("{0: c}", somevalue) in C#, aber ich habe eine harte Zeit herauszufinden, wie die Ausgabe zu konfigurieren erfülle meine Bedürfnisse. Hier sind meine Bedürfnisse:Benötigen Sie ein benutzerdefiniertes Währungsformat mit String.Format

  1. 0 Ausgänge blank
  2. 1,00 Ausgänge $ 1.00
  3. 10.00 Ausgänge $ 10.00
  4. 100.00 Ausgaben zu $ ​​100.00
  5. 1000.00 Ausgänge auf $ 1,000.00

I habe versucht String.Format ("{0: c}", somevalue) aber für Nullwerte gibt es $ 0,00 aus was ich nicht will. Ich habe auch String.Format versucht ("{0: $ 0,00; $ (0,0,00); #}", somevalue), aber für 1,0 gibt es $ 01,00 aus. String.Format ("{0: $ 0.00; $ (0.00); #}", somevalue) funktioniert in den meisten Fällen, aber wenn ein Wert 1000.00 ist, ist die Ausgabe $ 1000.00.

Gibt es ein Format, das in alle 5 Fälle passt? Die gesamte Dokumentation, die ich gelesen habe, beschreibt nur die Grundlagen und berührt diese Art von Szenario nicht.

+0

if (Geld> 0) Text ausgeben; – MrFox

Antwort

19

Wenn Sie

string.Format("{0:$#,##0.00;($#,##0.00);''}", value) 

verwenden Sie „“ für den Nullwert und den übrigen Werten bekommen sollte richtig zu formatiert werden.

+0

Das ist, was ich gesucht habe. Ich mache diese Formatierung in einem Repeater und wollte etwas, das einfach und prägnant ist. – Notorious2tall

+0

Andrews Antwort funktionierte auch, und wenn ich das im Codebehind tun würde, wäre ich mit seiner Lösung gegangen und nicht einmal versucht, das String.Format herauszufinden. Aber ich suchte nach der eleganten Lösung. Nicht, dass irgendwer meine Gedanken dazu hätte lesen können. :) – Notorious2tall

+0

+1 von mir .. excellent .. könnten Sie mir bitte etwas genauer erklären, wie das funktioniert .. –

4

versuchen, etwas wie folgt aus:

String currency = (number == 0) ? String.Empty : number.ToString("c"); 
4

Je nachdem, ob Sie konsistent den gleichen Datentyp für alle Ihre Währungswerte verwenden, könnten Sie eine Erweiterungsmethode schreiben, die es so macht, dass Ihr Fall immer erfüllt wird. wenn Sie den Dezimal-Typ Zum Beispiel wurden unter Verwendung von:

public static string ToCurrencyString (this decimal value) 
{ 
    if (value == 0) 
    return String.Empty; 
    return value.ToString ("C"); 
} 
0

Die „C“ Währungsformate sind groß, bis Sie eine leere brauchen für 0. es gibt zwei Wege, eine oben, ähnlich denen, die erwähnt, die ich verwenden, die Sie den Rohling für 0 geben:

// one way 
string.Format("{0:$#,##0.00;($#,##0.00);''}", somevalue) 

// another way 
somevalue.ToString("$#,##0.00;($#,##0.00);''") 

die zweite Technik fühlt sich mehr „fließend“, wenn Sie möchten, dass Stil der Code (wie ich es tue).

Verwandte Themen