Sformatować dziesiętny dla wartości procentowych?

206

Chcę czegoś takiego:

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

Gdzie %% to dostawca formatu lub cokolwiek, czego szukam. Powinno skutkować: Value: %85.26..

Zasadniczo potrzebuję go do wiązania wpf, ale najpierw rozwiążmy ogólny problem z formatowaniem:

<TextBlock Text="{Binding Percent, StringFormat=%%}" />
Shimmy Weitzhandler
źródło

Odpowiedzi:

422

Użyj ciągu Pformatu . Zależy to od kultury:

String.Format("Value: {0:P2}.", 0.8526) // formats as 85.26 % (varies by culture)
Michael Haren
źródło
1
Patrząc tutaj, duża różnica jest jak w typie amerykańskim i francuskim. Jeśli powyższe informacje różnią się w zależności od kultury, czy istnieje Pformatowanie niezależne od kultury ?
bonCodigo
2
@bonCodigo: jeśli chcesz uzyskać dane wyjściowe dla konkretnej kultury, wyraźnie ją określ.
Michael Haren
11

Jeśli masz dobry powód, aby odłożyć formatowanie zależne od kultury i uzyskać wyraźną kontrolę nad tym, czy między wartością a „%” jest spacja, oraz czy „%” jest wiodące czy końcowe, możesz użyć funkcji NumberFormatInfo PercentPositivePattern i Właściwości PercentNegativePattern .

Na przykład, aby uzyskać wartość dziesiętną z końcowym „%” i bez spacji między wartością a „%”:

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

Bardziej kompletny przykład:

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
źródło
3

Jeśli chcesz użyć formatu, który pozwala zachować numer jak Twój wpis, ten format działa dla mnie: "# \\%"

David Neira
źródło
2

Ten kod może ci pomóc:

double d = double.Parse(input_value);
string output= d.ToString("F2", CultureInfo.InvariantCulture) + "%";
Nitika Chopra
źródło
-8

Znalazłem powyższą odpowiedź jako najlepsze rozwiązanie, ale nie podoba mi się wiodąca przestrzeń przed znakiem procentu. Widziałem dość skomplikowane rozwiązania, ale po prostu używam tego dodatku Zamień do powyższej odpowiedzi zamiast używać innych rozwiązań zaokrąglania.

String.Format("Value: {0:P2}.", 0.8526).Replace(" %","%") // formats as 85.26% (varies by culture)
Ian Townsend
źródło
I nadal źle, jeśli chcesz wymusić takie wejście tak bardzo, możesz ustawić liczbę jako zmiennoprzecinkową i dodać znak procentu, ponieważ zamiana jest kosztowna, aw tym przypadku niezbyt przydatna "String.Format (" Wartość: {0: F2} . ", 0,8526 * 100)"
rekiem87