Подтвердить что ты не робот

Как отформатировать число в процентах без знака процента?

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

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

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

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


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


Решено с помощью принятого решения Richard:


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

Thread.CurrentThread.CurrentCulture = new MyCulture();
4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

но умножение на 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}" />

Ответ 4

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

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

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

Однако, я согласен с Pax и не понимаю, почему вы не идете с файлами * 100 и {0: N0}

** Доступ из Visual Studio без ссылки *

Ответ 5

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

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

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

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

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

Ответ 6

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

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

Ответ 7

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

Ответ 8

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

string newString = "0.13".Replace("0.", string.Empty) + "%";