计算不按预期工作..任何想法? (iphone / int)

时间:2009-12-24 15:29:39

标签: objective-c iphone math

我有一个不起作用的计算,我无法弄明白为什么!

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。那应该显示在我的标签上? (每人每秒的费用)。

任何想法?我应该使用浮点数代替整数的整数吗?

3 个答案:

答案 0 :(得分:8)

进行整数除法时,数字会被截断,所以:

6 / 4
>>> 1

将您的数据类型更改为float或double,并将所有数字写为“100.0” - 否则将被视为int。

答案 1 :(得分:2)

看着

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

不应该是

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

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

答案 2 :(得分:1)

使用"%f"时,请确保参数为float或double,而不是整数。 GCC会针对printf向您发出警告,但出于某种原因,它无法为stringWithFormat:执行此操作。