Хобрук: Ваш путь к мастерству в программировании

процент от двух инт?

Я хочу получить два целых числа, одно из которых делится на другое, чтобы получить десятичное число или процент. Как я могу получить процент или десятичное число от этих двух целых чисел? (Я не уверен, что это правильно. Я, вероятно, далеко...), например:

int correct = 25;
int questionNum = 100;
float percent = correct/questionNum *100;

Вот как я думал, что смогу это сделать, но это не сработало ... Я хочу превратить десятичную дробь (если она есть) в процент от 100, например, в этом случае это% 25. есть идеи у кого-нибудь?

Вот правильный код (спасибо Сальваторе Превити!):

float correct = 25;
float questionNum = 100;
float percent = (correct * 100.0f) / questionNum;

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

21.10.2011

  • Не используйте float, если вам не разрешено использовать double. Вы теряете точность без особой выгоды. 22.10.2011
  • процентов должно содержать 25 в нем. Не уверен, в чем именно заключается ваша проблема, кажется неясным. Пожалуйста, обновите свой вопрос и опубликуйте функцию, в которой вы используете этот код. 22.10.2011
  • @ Эрик, ах, глупый я :) я слишком много занимался C весь день, хе-хе, Java и строгие типы. 22.10.2011
  • @HovercraftFullOfEels Мне разрешено использовать двойное, но как мне его использовать в этом? 22.10.2011
  • Везде, где вы видите float, замените double. Затем посчитайте как (double)n/v * 100; 22.10.2011
  • @HovercraftFullOfEels Я отредактировал свой код в своей программе, но он дает мне NaN в качестве ответа, вот мой код: (я изменил переменные, чтобы было понятно) двойной процент = (двойной) правильный/questionNum * 100; 22.10.2011

Ответы:


1

Если вы не добавите .0f, оно будет рассматриваться как целое число, а целочисленное деление действительно сильно отличается от деления с плавающей запятой :)

float percent = (n * 100.0f) / v;

Если вам нужно целое число из этого, вы, конечно, можете снова привести float или double к целому числу.

int percent = (int)((n * 100.0f) / v);

Если вы знаете, что ваше значение n меньше 2 147 4836 (то есть (2 ^ 31/100)), вы можете выполнять все операции с целыми числами.

int percent = (n * 100) / v;

Если вы получаете NaN, это потому, что, что бы вы ни делали, вы, конечно, не можете делить на ноль... это не имеет смысла.

21.10.2011
  • 100F достаточно. Нет необходимости в .0. 22.10.2011
  • @SalvatorePreviti дает мне NAN в качестве ответа, когда я использую поплавок. с int вообще не работает.. 22.10.2011
  • Если v равно нулю, это вычисление не имеет смысла, и это единственный способ получить NaN (число, разделенное на ноль, не является числом). 22.10.2011
  • v равно 4, позвольте мне проверить это еще раз. 22.10.2011
  • нет, все еще не работает, и я проверил это, и v равно 4, а n равно 1 22.10.2011
  • я изменил n на число с плавающей запятой, и теперь я получил ответ как бесконечность -_- 22.10.2011
  • Я понял!!!!!! я изменил каждую переменную на число с плавающей запятой, и теперь она работает !!! Благодарность!! 22.10.2011

  • 2

    Два варианта:

    Выполните деление после умножения:

    int n = 25;
    int v = 100;
    int percent = n * 100 / v;
    

    Преобразуйте int в float перед делением

    int n = 25;
    int v = 100;
    float percent = n * 100f / v;
    //Or:
    //  float percent = (float) n * 100 / v;
    //  float percent = n * 100 / (float) v;
    
    21.10.2011
  • Я получаю NAN в качестве ответа .. есть идеи? 22.10.2011
  • @Baruch: и n, и v должны быть равны 0, если вы получаете NaN 22.10.2011
  • Пожалуйста, будьте осторожны с целочисленным переполнением. В случае переполнения вы, вероятно, получите отрицательные числа. 31.08.2016

  • 3

    Один из них должен быть поплавком. Один из возможных способов обеспечить это:

    float percent = (float) n/v * 100;
    

    В противном случае вы выполняете целочисленное деление, которое усекает числа. Кроме того, вы должны использовать double, если нет веской причины для float.

    Следующая проблема, с которой вы столкнетесь, заключается в том, что некоторые из ваших процентов могут выглядеть как 24,9999999999999% вместо 25%. Это связано с потерей точности в представлении с плавающей запятой. Вам тоже придется решить, как с этим поступить. Варианты включают DecimalFormat, чтобы "исправить" форматирование или BigDecimal для представления точных значений.

    21.10.2011
  • Это один из многих способов сделать это. Важно то, что одно из чисел, используемых при делении, является числом с плавающей запятой. 22.10.2011
  • Да... вы можете сделать (n / (float)v) * 100; 22.10.2011
  • Нет, операция не требует никаких значений float. См. ответ @Eric. 22.10.2011
  • @Loadmaster: Это работает, только если v без остатка делится на n. В противном случае вы получите ошибки округления. ОП явно запросил десятичное число или процент, и, поскольку это для приложения викторины, ответ без fp не будет работать очень хорошо, если вы не хотите установить строгие ограничения на количество вопросов, которые могут быть в викторине. 22.10.2011

  • 4

    Что ж, чтобы превратить десятичную дробь в проценты, вы можете сделать это,

    float percentage = (correct * 100.0f) / questionNum;
    
    19.10.2017
    Новые материалы

    Как сделать HTML динамическим с помощью JavaScript
    Код JavaScript выполняется внутри страниц сайта. Таким образом, страница вашего сайта содержит метки HTML, а также пояснения (скрипты), составленные с использованием диалекта сценариев, такого как..

    Деревья классификации и регрессии
    Это мой второй пост об алгоритмах машинного обучения. Мой первый пост посвящен искусственным нейронным сетям, вы можете найти его ниже. Нейронные сети — базовое..

    HMTL - Многозадачное обучение для решения задач НЛП
    Достижение результатов SOTA путем передачи знаний между задачами Область обработки естественного языка включает в себя десятки задач, среди которых машинный перевод, распознавание именованных..

    Решения DBA Metrix
    DBA Metrix Solutions предоставляет удаленного администратора базы данных (DBA), который несет ответственность за внедрение, обслуживание, настройку, восстановление базы данных, а также другие..

    Начало работы с Блум
    Обзор и Codelab для генерации текста с помощью Bloom Оглавление Что такое Блум? Некоторые предостережения Настройка среды Скачивание предварительно обученного токенизатора и модели..

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..