Iphone 在方法之间传递时,float被损坏(类型转换问题?)
我无法将浮点值从一个对象传递到另一个对象。在第一种方法中它看起来不错,但在第二种方法中它的价值是巨大的。我想这是我打字的一个问题,因为这是我最了解的事情。非常感谢您的帮助 在我的游戏控制器中,我执行以下操作:Iphone 在方法之间传递时,float被损坏(类型转换问题?),iphone,objective-c,cocoa,floating-point,casting,Iphone,Objective C,Cocoa,Floating Point,Casting,我无法将浮点值从一个对象传递到另一个对象。在第一种方法中它看起来不错,但在第二种方法中它的价值是巨大的。我想这是我打字的一个问题,因为这是我最了解的事情。非常感谢您的帮助 在我的游戏控制器中,我执行以下操作: float accuracy = (float)hitCount/(float)(hitCount+missCount); NSLog(@"GameController - hits: %i misses: %i enemies: %i accuracy: %f", hitCount, m
float accuracy = (float)hitCount/(float)(hitCount+missCount);
NSLog(@"GameController - hits: %i misses: %i enemies: %i accuracy: %f", hitCount, missCount, escapedCount, accuracy);
[delegate postGameWithScore:roundScore andAccuracy:accuracy];
在游戏控制器的委托中调用此方法:
-(void)postGameWithScore:(NSInteger)score andAccuracy:(float)accuracy {
cumulativeScore += score;
NSLog(@"GameMaster - score: %i accuracy %f",cumulativeScore, accuracy);
/* non relevant code clipped */
}
输出:
GameController - hits: 14 misses: 54 enemies: 35 accuracy: 0.205882
GameMaster - score: 3800 accuracy 36893488147419103232.000000
我不明白为什么第二个NSLog中的准确性不正确。!!解决了
将此添加到我的代理标题中修复了它:
-(void)postGameWithScore:(NSInteger)score andAccuracy:(float)accuracy;
我不知道为什么会修复它,但这将教会我如何将编译器警告视为警告而不是错误。如果不指定标头,则所有值都将作为整数传递(但由于某种原因,它将变为0x60000000)。将其转换为float
表示会产生垃圾(3.68935e+19)。把它打开。当你这么做的时候,这里有一些你应该打开的警告: