2015-01-22 17 views
2

제 질문은; roundedInt = (int)unRoundedDoubleroundedInt = (int)(floor(unRoundedDouble))을 통해 int double로 반올림하는 기능상의 차이점이 있습니까?C : double에서 int로 반올림하는 더 좋은 방법

나는 코드에서 사용 된 후자를 보았을 때 안전 또는 기능상의 이유가 있다고 생각했지만 다르게 처리 될 내용을 파악할 수 없었습니다.

또한 둥근 더블은 int에 맞추기에는 너무 크지 않을 것입니다. 이것은 미리 결정되었습니다.

답변

3

이들은 근본적으로 다릅니다. int으로 캐스트하면 0을 향해 비 정수 부분이 잘립니다. floor은 동일하지만, - 무한대로 할 것입니다.

예 :

double d = -1.234; 
printf("%d %d\n", (int)d, (int)floor(d)); 

수익률은 : 당신은 잘못된 방법

-1 -2 
2

floor의 해답은 음수로는 잘 작동하지만, 반올림하여 floor 연산을 의미하는 경우 캐스팅 버전이 수학적으로 올바르지 않습니다.

따라서 #floor은 항상 수학적으로 floor 연산으로 작동하며, 캐스팅은 긍정에 대해 동일하게 동작합니다. 그러나 네거티브에서의 캐스팅은 ceiling 작업처럼 작동합니다.

+0

을 설명 할 수, 또는 작동하지 않을 경우를 줄? 감사! :) (걱정하지 말라, 나는 그것이 네거티브를 반올림한다는 것을 깨달았다.) – BigBadWolf

+1

@BigBadWolf 캐스팅은 소수 부분을 잘라내는 반면에 'floor'는 실제 수학적 바닥을 계산한다. –