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


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

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



-8

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

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

И все же неправильно, если вы хотите принудительно ввести этот ввод, вы можете поместить число в число с плавающей точкой и добавить знак процента, поскольку замена является дорогостоящей и в этом случае не очень полезной "String.Format (" Значение: {0: F2} . ", 0,8526 * 100)"
rekiem87
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.