расчет не работает, как ожидалось .. какие-либо идеи? (iphone / int) - PullRequest
0 голосов
/ 24 декабря 2009

У меня есть расчет, который не работает, и я не могу понять, почему!

int numHoursInWeek;
int numDays;
int averageSalary;

int total_seconds_in_year = ((numHoursInWeek * 60 * 60) * numDays);

NSLog(@"average sal in pence=%i", (averageSalary * 100));
NSLog(@"num seconds in year=%i", total_seconds_in_year);
NSLog(@"cost per second=%i", ((averageSalary * 100) / total_seconds_in_year));

int cost_per_person_per_second = ((averageSalary*100) / total_seconds_in_year);

costPerSecond = (cost_per_person_per_second * numPeople);
lblCostPerPerson.text = [NSString stringWithFormat:@"%.2f",cost_per_person_per_second];

вышеприведенное возвращает следующее в NSLog

average sal in pence=3400000
num seconds in year=31968000
cost per second=-1.991753

Я знаю, что все остальное устанавливается правильно (например, numDays, AverageSalary). Когда я делаю калькуляцию вручную, я получаю 0.1063. Так что должно показываться на моем лейбле ?? (стоимость на человека в секунду).

есть идеи? я должен использовать float вместо int для переменных?

Ответы [ 3 ]

8 голосов
/ 24 декабря 2009

Когда вы делаете целочисленное деление, числа усекаются, поэтому:

6 / 4
>>> 1

Измените тип данных на float или double и напишите все свои числа, например, как "100.0" - в противном случае он будет рассматриваться как int.

2 голосов
/ 24 декабря 2009

Глядя на

total_seconds_in_year = ((numHoursInWeek * 60 * 60) * numDays);

Разве это не должно быть

total_seconds_in_year = ((numHoursInWeek * 60 * 60) * numWeeks);

или

 total_seconds_in_year = ((numHoursInDay * 60 * 60) * numDays);
1 голос
/ 24 декабря 2009

Когда вы используете "%f", убедитесь, что аргумент является с плавающей или двойной, а не целым числом. GCC предупредит вас об этом за printf, но по какой-то причине не может сделать это за stringWithFormat:.

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