2010-01-09 2 views
0

한 개체에서 다른 개체로 float 값을 전달하는 데 문제가 있습니다. 첫 번째 방법에서는 괜찮은 것처럼 보이지만 두 번째 방법에서는 값이 큽니다. 내 타입 변환에 문제가 있다고 생각합니다. 왜냐하면 그것이 내가 가장 가난한 것으로 이해하기 때문입니다. 도움이 대단히 감사합니다! 내 게임 컨트롤러에서메서드간에 전달할 때 float 값이 엉망이되고 있습니다 (타입 변환 문제가 있습니까?)

, 내가 이렇게 :

-(void)postGameWithScore:(NSInteger)score andAccuracy:(float)accuracy { 
    cumulativeScore += score; 
    NSLog(@"GameMaster - score: %i accuracy %f",cumulativeScore, accuracy); 
    /* non relevant code clipped */ 
} 

출력 :

게임 컨트롤러의 위임에이 메소드를 호출
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]; 

GameController - hits: 14 misses: 54 enemies: 35 accuracy: 0.205882 
GameMaster - score: 3800 accuracy 36893488147419103232.000000 

그럴 수 없어 왜 두 번째 NSLog에서 accuracy이 올바르지 않은지 알아냅니다.

답변

1

!! 그것을 해결했다. 이 그것을 고정 이유

-(void)postGameWithScore:(NSInteger)score andAccuracy:(float)accuracy; 

이 몰라,하지만 경고 대신 오류로 컴파일러 경고를 치료 가르쳐 것입니다 :

내 대리인의 헤더가 고정이 추가.

+1

헤더를 지정하지 않으면 값이 모두 정수로 전달됩니다 (그러나 어떤 이유로 0x60000000이됩니다). 이것을 float 표현으로 변환하면 쓰레기 (3.68935e + 19)가됩니다. – kennytm

+0

Xcode에서 "경고를 오류로 처리"라는 빌드 설정이 있습니다. 그걸 켜십시오. 여기에있는 동안 다음을 켜야하는 다른 경고가 있습니다. http://boredzo.org/blog/archives/2009-11-07/warnings –

관련 문제