2009-12-24 83 views
0

我有一个计算,这是行不通的,我不知道为什么!计算不能按预期工作..任何想法? (iphone/int)

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

有什么想法?我应该使用浮动而不是整数变量?

回答

8

当你做整数除法,数字将被截断,这样:

6/4 
>>> 1 

改变你的数据类型为float或double,并编写所有的数字为“100.0”,例如 - 否则将被视为作为一个整数。

+0

+1:关于整数与浮点操作的误解是许多程序中错误的主要原因 - 尤其是因为它们通常可以在某些条件和输入下进行诊断和工作,而在其他情况下通常很细微。所有的开发人员都应该熟悉算术运算如何在他们使用的语言中工作。它可以节省很多的痛苦。 – LBushkin 2009-12-24 15:37:04

+0

谢谢你们 - 我会改变他们并按照指示使用。确认后会回复! – 2009-12-24 15:40:04

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); 
+0

是的,你是正确的 - 很好的发现,谢谢! – 2009-12-24 15:39:30

1

当您使用"%f",确保该参数是float或double,不一个整数。 GCC会对printf发出警告,但由于某种原因,它不能对stringWithFormat:执行此操作。