Objective-C中一个基本浮点数计算的奇怪bug



我现在有可能很蠢,但是检查一下。我有一个浮点数:

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。我遗漏了什么?

3/2被解释为(int)3/2,因此求值为1。您可以将这些类型显式地写成3.0f/2.0f,这样应该会得到您期望的结果(就像显式地将整个表达式转换为float一样)。

对其中一个操作数进行强制转换,这样另一个操作数将被提升为浮点数,您将得到浮点除法而不是整数除法:

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

最新更新