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

Odpowiedzi:



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)

3

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


2

Ten kod może ci pomóc:

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

-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)

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.