2011-10-23 5 views
4

그래서 제가 가지고 있습니다플로트의 정수 부분을 얻으십시오 : Objective-C

float x = x + 0.25;

이 플로트는 클릭이

NSLog 발생 때마다 호출됩니다

("% f를"@를, 배);

은 내가 nslog는이

x  return   

1.25   1 
1.50   1 
3.25   3 
4.75   4 

같은 어떤 아이디어 있도록 정수 부분을 반환하려면?

답변

12

부동 소수점 숫자가 int의 범위를 벗어나면 int으로 변환되지 않습니다.

"%.0f"으로 인쇄하면 잘리지 않으므로 반올림되므로 4.75는 5으로 인쇄됩니다. <math.h>에 선언

컴파일러가 (더 정확하게, 런타임 라이브러리)를 지원하는 경우

trunc(), truncf()truncl() 기능은, 당신이 원하는 게 정확히 무엇을 :

printf("%.0f\n", trunc(x)); 

그 기능 C99의 새로운 기능 따라서 컴파일러가 지원하지 않을 수도 있습니다. C90은 floor() 기능을 제공합니다. 음수에 대한 특수한 코드를 작성하는 경우이를 사용할 수 있습니다.

4

당신은 INT (캐스트)로 X를 처리 할 수 ​​있습니다 :

NSLog("%d", (int)x); 

참고 :이되지 라운드, 그것은 단지 정수 부분을 반환 값을 자릅니다 것입니다.

편집 : 가능한 모든 플로팅 값을 자르는 안전한 방법은 아니며, 작은 값 (int에 들어있는 피팅)에도 문제가 없습니다.

+1

x가 'INT_MIN' ..' INT_MAX' 범위를 벗어나면 실패합니다. –

+0

원하는 경우 긴 길이 또는 부호없는 길이를 사용하여 사용 가능한 범위를 늘릴 수 있습니다. – jv42

+0

들어 본 모든 구현에서 가장 큰 정수 유형이 너무 좁아서 가장 좁은 부동 소수점 유형의 전체 범위를 보유 할 수 없습니다. 그리고'trunc()'도 있습니다. –

관련 문제