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=%%}" />
Shimmy Weitzhandler
quelle

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)
Jon Schneider
quelle
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: "# \\%"

David Neira
quelle
2

Dieser Code kann Ihnen helfen:

double d = double.Parse(input_value);
string output= d.ToString("F2", CultureInfo.InvariantCulture) + "%";
Nitika Chopra
quelle
-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)
Ian Townsend
quelle
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