Відформатувати десятковий для відсоткових значень?


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

Якщо ви хочете використовувати формат, який дозволяє зберегти число, як ваш запис, цей формат працює для мене: "# \\%"


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)

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