Как отформатировать число в процентах без знака процента?
Как мне в формате .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();
Ответы
Ответ 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) + "%";