Расчет процента всегда возвращает 0 - PullRequest
9 голосов
/ 04 сентября 2010

Я пытаюсь рассчитать процент чего-то. Это простая математика. Вот код.

float percentComplete = 0;
if (todaysCollection>0) {
    percentComplete = ((float)todaysCollection/(float)totalCollectionAvailable)*100;
}

Здесь значение todaysCollection равно 1751, а totalCollectionAvailable равно 4000. Оба типа int. Но процентComplete всегда показывает 0. Почему это происходит? Может кто-нибудь мне помочь. Я новичок в Objective C.

Ответы [ 3 ]

11 голосов
/ 04 сентября 2010

Но процентComplete всегда показывает 0

Как вы отображаете процентComplete?Имейте в виду, что это число с плавающей точкой - если вы интерпретируете его как целое число, не передавая его, вы получите неправильный вывод.Например, это:

int x = 1750;
int y = 4000;
float result = 0;
if ( x > 0 ) {
    result = ((float)x/(float)y)*100;
}
NSLog(@"[SW] %0.1f", result);   // interpret as a float - correct
NSLog(@"[SW] %i", result);      // interpret as an int without casting - WRONG!
NSLog(@"[SW] %i", (int)result); // interpret as an int with casting - correct

Выводит это:

2010-09-04 09:41:14.966 Test[6619:207] [SW] 43.8
2010-09-04 09:41:14.967 Test[6619:207] [SW] 0
2010-09-04 09:41:14.967 Test[6619:207] [SW] 43

Имейте в виду, что приведение значения с плавающей запятой к целочисленному типу просто отбрасывает вещи после десятичной запятой - поэтому вВ моем примере 43.8 отображается как 43. Чтобы округлить значение с плавающей запятой до ближайшего целого, используйте одну из функций округления из math.h, например:

#import <math.h>

... rest of code here

NSLog(@"[SW] %i", (int)round(result)); // now prints 44
1 голос
/ 04 сентября 2010

Я думаю, что ваше значение для todaysCollection и totalCollectionAvailable неверно.Дважды проверьте это.

Поставьте NSLog(@"%d", todaysCollection) прямо перед оператором if

0 голосов
/ 04 сентября 2010

Возможно попробуйте с * (float) 100, иногда это проблема;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...