WedX - журнал о программировании и компьютерных науках

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

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

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

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

(Предыстория: в 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();
02.06.2009

  • Что не так с умножением на 100? 02.06.2009
  • В этом нет ничего плохого; кроме того, что я хотел бы изменить отображение числа без изменения запроса данных. В частности, я хотел бы знать, как отображать число, например, например. 0,13 как 13 в BoundField в ASP.NET — без знака процента. 02.06.2009

Ответы:


1

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

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

02.06.2009

2

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

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

02.06.2009
  • +1 Либо так, либо обрезать знак % после форматирования до {0:P0} 02.06.2009
  • Спасибо. Означает ли это, что нет способа масштабировать число в строке формата? Может быть, я должен сформулировать еще один вопрос, как это. 02.06.2009

  • 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}" />
    
    02.06.2009

    4

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

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

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

    Тем не менее, я согласен с Паксом и не понимаю, почему бы не использовать * 100 и {0:N0}

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

    02.06.2009

    5

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

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

    EDIT: Это должно работать в разных культурах:

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

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

    02.06.2009
  • Заменить( %... - I вещь, которая содержит пробел... или обрезать конечный результат правильно :) 02.06.2009
  • В некоторых ситуациях это может привести к сбою, поскольку используемый знак % зависит от региональных параметров. 02.06.2009

  • 6

    Как насчет отделки?

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

    7

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

    02.06.2009

    8

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

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

    9

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

    string.Format(new NumberFormatInfo { PercentSymbol = string.Empty }, "{0:0%}", 0.123); // => 12
    
    28.06.2018
  • Можете ли вы добавить некоторые пояснения? 28.06.2018

  • 10

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

    $"{rate * 100:F2}"
    
    26.03.2019
    Новые материалы

    Как создать диаграмму градиентной кисти с помощью D3.js
    Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

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

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


    Для любых предложений по сайту: wedx@cp9.ru