процент от двух int? - PullRequest
       33

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

48 голосов
/ 22 октября 2011

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

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;

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

Ответы [ 5 ]

77 голосов
/ 22 октября 2011

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

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

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

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

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

int percent = (n * 100) / v;

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

14 голосов
/ 22 октября 2011

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

Деление после умножения:

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;
3 голосов
/ 22 октября 2011

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

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

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

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

0 голосов
/ 19 октября 2017

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

float percentage = (correct * 100.0f) / questionNum;
0 голосов
/ 22 октября 2011
float percent = (n / (v * 1.0f)) *100
...