2009-11-24 7 views
155

Was ich will, ist so etwas wie dieses:Format Dezimal für Prozentwerte?

String.Format("Value: {0:%%}.", 0.8526) 

Wo %% dass Format-Provider ist oder was auch immer ich suche. Sollte sich ergeben: Value: %85.26..

Ich brauche es grundsätzlich für wpf verbindlich, aber lassen Sie uns zuerst die allgemeine Formatierung Problem lösen:

<TextBlock Text="{Binding Percent, StringFormat=%%}" /> 

Antwort

345

die P format string verwenden. Dies wird durch die Kultur unterschiedlich sein:

String.Format("Value: {0:P2}.", 0.8526) // formats as 85.26 % (varies by culture) 
+0

[at hier großen Unterschied Blick ist wie USA und Typ Frankreich.] (Http://msdn.microsoft.com/en-us/library/dwhawy9k%28v=vs.110%29.aspx) Wenn oben variiert nach Kultur, gibt es eine kulturunabhängige 'P'-Formatierung? – bonCodigo

+0

@bonCodigo: Wenn Sie die Ausgabe für eine bestimmte Kultur wünschen, geben Sie die Kultur explizit an. –

3

Wenn Sie einen guten Grund kulturabhängigen Formatierungs beiseite zu legen und explizite Kontrolle geraten darüber, ob oder nicht es gibt einen Raum zwischen dem Wert und dem „%“, und ob dem " % "ist führend oder nachlaufend, Sie können die Eigenschaften PercentPositivePattern und PercentNegativePattern von NumberFormatInfo verwenden.

Zum Beispiel einen Dezimalwert mit einer Hinter „%“ und keinen Raum zwischen dem Wert zu erhalten und dem „%“:

myValue.ToString("P2", new NumberFormatInfo { PercentPositivePattern = 1, PercentNegativePattern = 1 }); 

vollständigeres Beispiel:

using System.Globalization; 

... 

decimal myValue = -0.123m; 
NumberFormatInfo percentageFormat = new NumberFormatInfo { PercentPositivePattern = 1, PercentNegativePattern = 1 }; 
string formattedValue = myValue.ToString("P2", percentageFormat); // "-12.30%" (in en-us) 
-7

Ich habe Ich fand die obige Antwort als die beste Lösung, aber ich mag den führenden Platz vor dem Prozentzeichen nicht. Ich habe etwas komplizierte Lösungen gesehen, aber ich benutze diesen Zusatz "Ersetzen" nur zur obigen Antwort, anstatt andere Rundungslösungen zu verwenden.

String.Format("Value: {0:P2}.", 0.8526).Replace(" %","%") // formats as 85.26% (varies by culture) 
+0

Und immer noch falsch, wenn Sie diese Eingabe so sehr erzwingen möchten, können Sie die Zahl als Gleitkommazahl setzen und das Prozentzeichen hinzufügen, da replace teuer ist und in diesem Fall nicht sehr nützlich ist "String.Format (Wert: {0: F2 }. ", 0.8526 * 100)" – rekiem87

+0

stimme total mit rekiem87 überein – Defkon1

Verwandte Themen