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

206

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

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

Где %% это поставщик формата или что я ищу. Если результат: Value: %85.26..

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

<TextBlock Text="{Binding Percent, StringFormat=%%}" />
Шимми Вайцхандлер
источник

Ответы:

422

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

String.Format("Value: {0:P2}.", 0.8526) // formats as 85.26 % (varies by culture)
Майкл Харен
источник
1
Глядя на это здесь, большая разница похожа на тип США и Франции. Если выше зависит от культуры, есть ли независимое от культуры Pформатирование?
BonCodigo
2
@bonCodigo: если вы хотите вывод для конкретной культуры, укажите культуру явно.
Майкл Харен
11

Если у вас есть веская причина отложить форматирование, зависящее от культуры, и получить явный контроль над наличием пробела между значением и «%», а также с тем, является ли «%» лидирующим или конечным, вы можете использовать PercentPositivePattern для NumberFormatInfo и Свойства 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

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

Дэвид Нейра
источник
2

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

double d = double.Parse(input_value);
string output= d.ToString("F2", CultureInfo.InvariantCulture) + "%";
Нитика Чопра
источник
-8

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

String.Format("Value: {0:P2}.", 0.8526).Replace(" %","%") // formats as 85.26% (varies by culture)
Ян Таунсенд
источник
И все же неправильно, если вы хотите принудительно ввести этот ввод, вы можете поместить число в число с плавающей точкой и добавить знак процента, поскольку замена является дорогостоящей и в этом случае не очень полезной "String.Format (" Значение: {0: F2} . ", 0,8526 * 100)"
rekiem87