2010-05-12 6 views
2

첫 번째 게시물을 여기에 입력하십시오. NSNumber의 floatValue 메서드에 문제가있는 경우 - 어쨌든 부정확 한 숫자를 반환합니다. 여기에서 문제가있다 : I는 다음과 같이 배열 NSNumbers 무리 저장 : 의 NSNumber N = (의 NSNumber) [A objectAtIndex :NSNumber floatValue가 NSNumber 값과 같지 않음

NSArray *a = [NSArray arrayWithObjects: 
    [NSNumber numberWithFloat:0.04f], 
    [NSNumber numberWithFloat:0.028f], 
    [NSNumber numberWithFloat:0.016f], 
    [NSNumber numberWithFloat:0.004f], 
    nil]; 

그럼 I (예)이 제 1 값을 검색하려고 : 0]; CGFloat f = [n floatValue];

디버거에서 n은 요약 열의 0.04 값을 나타내지 만 f는 0.0399999991 값을 나타냅니다. 여기서 내가 뭘 잘못하고 있니?

모두에게 감사드립니다.

답변

2

당신은 아무 잘못도 없습니다. 특히 NSNumber 또는 CGFloat의 문제는 아닙니다. 부동 소수점 수에 대해서는 매우 보편적인데, 부동 소수점 수는 10의 제곱 수가 아닌 2의 거듭 제곱을 기반으로합니다. this definitive article 또는 Wikipedia article을 읽어야합니다.

요점은 표준 부동 소수점 수는 1/2, 1/4, 1/8, ...의 합계 인 숫자 만 정확하게 나타낼 수 있다는 것입니다. 1/10이 아닙니다. 따라서 표준 부동 소수점 수를 사용하여 0.1을 완전히 정확하게 나타낼 수는 없습니다.

실제로 처리해야하는 경우 합리적인 분수 또는 소수점 부동 소수점을 처리하는 루틴이 있습니다.

+0

이렇게하면 문제가 해결됩니다. 다른 말로하면, 당신이 먼저 반올림하지 않으면 == 수레와 비교하지 마십시오. 감사. – Mirkules

관련 문제