Objective-C中的奇怪错误,具有基本的浮点计算

时间:2013-01-06 14:13:30

标签: 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/2更改为1.5,我得到了46,70,93和140.我在这里缺少什么?

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:4)

转换其中一个操作数,这样另一个操作数将被提升为浮点数,你将有一个浮点除法而不是整数除法:

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