Форматировать десятичное значение для процентных значений?

Я хочу что-то вроде этого:

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

Где %% является поставщиком этого формата или тем, что я ищу. Должно получиться: Value: %85.26..

Мне в основном нужна привязка wpf, но сначала разрешите общую проблему форматирования:

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

Ответ 1

Используйте строку P. Это зависит от культуры:

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

Ответ 2

Если у вас есть веская причина отложить форматирование, зависящее от культуры, и получить явный контроль над наличием пробела между значением и "%", а также с тем, является ли "%" лидирующим или конечным, вы можете использовать NumberFormatInfo PercentPositivePattern и Свойства PercentNegativePattern.

Например, чтобы получить десятичное значение с конечным "%" и без пробела между значением и "%":

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

Более полный пример:

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

Если вы хотите использовать формат, который позволяет вам сохранить число, соответствующее вашей записи, этот формат работает для меня: "# \\%"

Ответ 4

Этот код может помочь вам:

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

Ответ 5

Я нашел ответ выше, чтобы быть лучшим решением, но мне не нравится ведущее пространство перед знаком процента. Я видел несколько сложных решений, но я просто использую это дополнение Replace для ответа выше, вместо использования других решений округления.

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