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

Преобразовать int в float

int total=0, number=0;
float percentage=0.0;

percentage=(number/total)*100;
printf("%.2f",percentage);

Если значение числа равно 50, а общее число равно 100, я должен получить 50.00 для процента, по крайней мере, это то, что я хочу. но я все время получаю 0.00 в качестве ответа и много раз перепробовал типы, но не помогал.

4b9b3361

Ответ 1

Целочисленное деление усекает, поэтому (50/100) приводит к 0. Вы можете применить к float (лучше double) или умножить на 100.0 (для точности double, 100.0f для float)) во-первых,

double percentage;
// ...
percentage = 100.0*number/total;
// percentage = (double)number/total * 100;

или

float percentage;
// ...
percentage = (float)number/total * 100;
// percentage = 100.0f*number/total;

Так как арифметика с плавающей запятой не ассоциативна, результаты 100.0*number/total и (double)number/total * 100 могут быть немного разными (то же самое справедливо для float), но крайне маловероятно повлиять на первые два места после десятичной точки, поэтому, вероятно, не имеет значения, какой вариант вы выберете.

Ответ 2

целочисленное деление в C усекает результат, поэтому 50/100 даст вам 0

Если вы хотите получить желаемый результат, попробуйте следующее:

((float)number/total)*100

или

50.0/100

Ответ 3

Нет, потому что вы выполняете выражение с использованием целых чисел, поэтому вы делите целое число 50 на целое число 100, что приводит к целому числу 0. Тип прикладывает один из них к float, и он должен работать.

Ответ 4

Вы выполняете целочисленную арифметику, поэтому результат правильный. Попробуйте

percentage=((double)number/total)*100;

BTW %f ожидает a double не a float. По чистой удаче, которая здесь конвертируется, так что это хорошо работает. Но обычно вы обычно используете double как тип с плавающей точкой в ​​C в настоящее время.

Ответ 5

Это даст вам результат, который вы хотите.

double total = 0;
int number = 0;
float percentage = number / total * 100
printf("%.2f",percentage);

Обратите внимание, что первый операнд является двойным

Ответ 6

Измените свой код на:

int total=0, number=0;
float percentage=0.0f;

percentage=((float)number/total)*100f;
printf("%.2f", (double)percentage);