Dezimalformat für Prozentwerte formatieren?


206

Was ich will ist so etwas:

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

Wo %% ist dieser Formatanbieter oder was auch immer ich suche. Sollte ergeben : Value: %85.26..

Ich brauche es grundsätzlich für die Wpf-Bindung, aber zuerst lösen wir das allgemeine Formatierungsproblem:

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

Antworten:



11

Wenn Sie einen guten Grund haben, die kulturabhängige Formatierung aufzuheben und explizit zu steuern, ob zwischen dem Wert und dem "%" ein Leerzeichen steht und ob das "%" führend oder nachlaufend ist, können Sie die PercentPositivePattern und von NumberFormatInfo verwenden PercentNegativePattern- Eigenschaften.

Um beispielsweise einen Dezimalwert mit einem nachgestellten "%" und ohne Leerzeichen zwischen dem Wert und dem "%" zu erhalten:

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)

3

Wenn Sie ein Format verwenden möchten, mit dem Sie die Nummer wie Ihren Eintrag beibehalten können, funktioniert dieses Format für mich: "# \\%"


2

Dieser Code kann Ihnen helfen:

double d = double.Parse(input_value);
string output= d.ToString("F2", CultureInfo.InvariantCulture) + "%";

-8

Ich habe festgestellt, dass die obige Antwort die beste Lösung ist, aber ich mag das führende Leerzeichen vor dem Prozentzeichen nicht. Ich habe etwas komplizierte Lösungen gesehen, aber ich verwende nur diese Ersetzen-Ergänzung zu der obigen Antwort, anstatt andere Rundungslösungen zu verwenden.

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

Und immer noch falsch, wenn Sie diese Eingabe so stark erzwingen möchten, können Sie die Zahl als float setzen und das Prozentzeichen hinzufügen, da das Ersetzen teuer und in diesem Fall nicht sehr nützlich ist. "String.Format (" Value: {0: F2} . ", 0,8526 * 100)"
rekiem87
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.