2013년 5월 15일 수요일

C에서 소수 반올림하는 법


C language로 프로그램을 하다보면 소수를 반올림해서 저장하고 있어야 하는 경우가 많은데, C에는 소수를 반올림하는 함수가 별도로 없다.

이때 아래와 같이 버림함수인 floor()를 이용하여 간단하게 반올림이 가능하다.


#include <math.h>

void main()
{
   float num = 1.4457 ;
   num = floor( num * 1000 + 0.5 ) / 1000 ; // num은 1.446로 저장된다.
   printf(" %f ", num);                                 // 1.446000이 출력된다.
}

소수 num은 1.4457로 초기화 돼 있다. num을 소수세째 자리까지만 사용하려면, 1000을 곱하고 ( 이때 1445.7 이 됨), 0.5를 더하여 한자리 수를 올린 뒤 floor()함수를 이용하여 불필요한 자리수를 버리면 필요한 유효자리수 만큼의 정수를 얻게된다(1446). 다시, 1000으로 나눠주면 원하는 값인 1.446을 얻을 수 있다.

num이 만약 1.4454 였다면, floor()에 의해 마지막 자리수가 버려지므로 1.445를 얻게 된다.

소수자리수를 2자리로 하고 싶다면, 1000대신에 floor(num * 100 + 0.5) / 100으로 하면 된다.