2012-04-26 7 views
7

ich eine negative Währung wie folgt zu formatieren: $(10.00)

Ich versuchte string.Format("{0:C}", itemprice) zu verwenden, aber das gibt mir dieses Ergebnis ($10.00) (die in der Klammer $

ich versuchte auch

string fmt = "##;(##)"; 
itemprice.ToString(fmt); 

aber es gibt mir die gleiche wie vor ($10.00)

Irgendeine Idee, wie man ein Ergebnis wie folgt erhält: $(10.00).

+5

Warum tun Sie benötigen das Währungssymbol außerhalb der Klammer ? Ich würde argumentieren, dass negative Währung in Klammern, Symbol und allen sein sollte. – Oded

+0

+1 Oded, stimme ich völlig zu, das richtige Format/Verhalten wäre ein Zeichen in den Klammern. – code4life

+2

Nun ja, ich weiß. aber Anfragen sind Anfragen. kann nicht mit dem Client streiten :) – Youssef

Antwort

5
itemPrice.ToString(@"$#,##0.00;$\(#,##0.00\)"); 

Sollte funktionieren. Ich habe es gerade auf PowerShell getestet:

PS C:\Users\Jcl> $teststring = "{0:$#,##0.00;$\(#,##0.00\)}" 
PS C:\Users\Jcl> $teststring -f 2 
$2,00 
PS C:\Users\Jcl> $teststring -f -2 
$(2,00) 

Ist das, was Sie wollen?

+0

@jck Wie führst du diesen Test ohne C#? csc.exe .... was ist PS? Kann ich es verwenden, um C# -Ausdrücke zu testen? kannst du mir einen Downloadlink geben? –

+0

@Royi: PS ist Powershell. Für Windows XP versuchen Sie [diesen Link] (http://support.microsoft.com/kb/968929), Vista und 7 haben bereits Powershell eingebaut, wenn ich mich richtig erinnere '(Alle Programme -> Accesories -> Windows PowerShell)' I glauben. – Jcl

+0

aber kann es C# Befehle bei cmd einfach so laufen? –

2

Sie müssten dies manuell aufteilen, da es sich um eine nicht standardmäßige Formatierung handelt.

string.Format("{0}{1:n2}", System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol, itemprice); 
3

Verwenden Jcl-Lösung und es eine schöne Erweiterung machen:

public static string ToMoney(this object o) 
{ 
    return o.toString("$#,##0.00;$\(#,##0.00\)"); 
} 

Dann ist es einfach anrufen:

string x = itemPrice.ToMoney(); 

Oder eine andere sehr einfache Implementierung:

public static string ToMoney(this object o) 
{ 
    // note: this is obviously only good for USD 
    return string.Forma("{0:C}", o).Replace("($","$("); 
} 
+0

Das zweite Snippet berücksichtigt keine anderen Währungen, d. H. Codiert US-Dollar-Zeichen. – abatishchev

+1

Sie können 'System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol' für die Parameter' Replace' verwenden – Jcl

Verwandte Themen