Как отформатировать число в процентах без знака процента? - PullRequest
22 голосов
/ 02 июня 2009

Как в .NET отформатировать число в процентах, не показывая знак процента?

Если у меня есть номер 0.13 и я использую строку формата {0:P0}, вывод будет 13 %.

Однако я хотел бы получить 13 вместо без умножения числа на 100 и использования строки формата {0:N0}.

(Справочная информация. В ASP.NET у меня есть GridView с BoundField, где я хотел бы отображать число в процентах, но без знака процента (%). Как это сделать?)


Спасибо за ответы. На момент редактирования 4 из 6 предложили, чего я хотел бы избежать, как объяснено выше. Я искал способ использовать только строку формата и избежать умножения на 100 и использования {0:N0}, но ответы показывают, что это невозможно ...


Решено с использованием принятого решения Ричард :


public class MyCulture : CultureInfo
{
    public MyCulture()
        : base(Thread.CurrentThread.CurrentCulture.Name)
    {
        this.NumberFormat.PercentSymbol = "";
    }
}

Thread.CurrentThread.CurrentCulture = new MyCulture();

Ответы [ 10 ]

16 голосов
/ 02 июня 2009

Определите пользовательскую культуру со своим собственным NumberFormatInfo, который возвращает String.Empty для его свойства PercentSymbol.

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

14 голосов
/ 02 июня 2009

Почему бы вам просто не умножить число на 100 и использовать строку формата "{0:N0}"? Мне кажется, это самое простое решение.

Если вы не можете придумать вескую причину, почему об этом не может быть и речи, это мой совет. Это не ракетостроение: -)

5 голосов
/ 02 июня 2009

но умножение на 100 это именно то, что вы хотите!

protected void myGrdiView_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        myObjectType ot = (myObjectType)e.Row.DataItem;

        ot.myNumber = ot.myNumber * 100; // multiply by 100
    }
}

и в HTML

<asp:BoundField DataType="myNumber" HeaderText="%" StringFormat="{0:N0}" />
2 голосов
/ 02 июня 2009

Как насчет этого ...

String.Format("{0:P0}",0.13).Replace("%","")

РЕДАКТИРОВАТЬ: Это должно работать в разных культурах:

var percentSymbol = CultureInfo.CurrentCulture.NumberFormat.PercentSymbol;
String.Format("{0:P0}",0.13).Replace(percentSymbol,"")

Существует также это решение , которое может быть более элегантным, но немного больше кода.

2 голосов
/ 02 июня 2009

MSDN * имеет это под "Строки пользовательского числового формата":

Наличие символа «%» в строка формата приводит к тому, что число умножить на 100, прежде чем это отформатирована. Соответствующий символ вставлен в сам номер на место, где «%» появляется в строка формата. Процентный символ используется зависит от текущего NumberFormatInfo class.

Но пример показывает, что он также выводит знак% - не то, что вы хотите, но, возможно, можно установить в ноль через класс NumberFormatInfo?

Однако я согласен с Паксом и не могу понять, почему не идут с * 100 и {0: N0}

** Доступ из Visual Studio, поэтому нет ссылки *

0 голосов
/ 26 марта 2019

Вот еще один более короткий и чистый способ сделать это.

$"{rate * 100:F2}"
0 голосов
/ 28 июня 2018

Вот пример использования NumberFormatInfo, как предложено @Richard:

string.Format(new NumberFormatInfo { PercentSymbol = string.Empty }, "{0:0%}", 0.123); // => 12
0 голосов
/ 02 июня 2009

Вы также можете попробовать что-то вроде

string newString = "0.13".Replace("0.", string.Empty) + "%";
0 голосов
/ 02 июня 2009

Точки, которые нужно учитывать в первую очередь, процент, отображаемый без%, является числом, поэтому давайте проигнорируем процентный аспект. Вы хотите знать, как отобразить число от 1 или менее до 100 или менее. Я ценю, что он связан, поэтому вы не можете изменить его во время отображения, так почему бы не изменить его во время запроса, то есть SELECT (значение * 100) AS Percentage, ...?

0 голосов
/ 02 июня 2009

Как насчет обрезки?

double d = .102;
string percent = d.ToString("P0").Trim(' ', '%');
...