2013-01-06 43 views
1

现在我很愚蠢,但请检查它。我有一个浮动:Objective-C中的一个奇怪的错误,带有基本的浮点计算

float wordTime=46.81; // I get it after some calculations 

然后我记录此:

NSLog(@"1:%f", wordTime); 
NSLog(@"2:%f", (3/2)*wordTime); 
NSLog(@"3:%f", (5/2)*wordTime); 
NSLog(@"4:%f", (7/2)*wordTime); 

我得到这样的:(其与日志数2个问题)

46.81 
46.81 // weird 
93.8 
140.7 

然后,我已经改变3/21.5我得到了46,70,93和140.我在这里错过了什么?

+4

'3/2'是一个整数除法。 – Mat

回答

6

3/2被解释为(int)3/2,因此评估为1。你可以写出明确的类型为3.0f/2.0f,它应该给出你期望的结果(就像明确地将整个表达式转换为float一样)。

+0

所以我很笨:( – Curnelious

+3

@Rant你不傻,你只是没有完全阅读C教程:)做到这一点。 (一般建议:在触摸Obejctive-C/OS X/iOS编程之前尝试掌握C) – 2013-01-06 14:18:30

+3

每个人都被这一次咬伤。至少有一次,那是:) – zoul

4

演员的操作数,以便其他操作将晋升为浮动,你就会有一个浮动部门,而不是一个整数除法之一:

NSLog(@"2:%f",(3.0/2)*wordTime );