본문 바로가기
IT Life

특정 소수점 반올림

by 미스터트롤 2007. 4. 5.
반응형

: round

#include <Turboc.h>

#include <math.h>

 

#define banollim(x,dig) (floor((x)*pow(10,dig)+0.5)/pow(10,dig))

 

void main(void)

{

     double x=123.456789;

     int i;

 

     for (i=-2;i<5;i++) {

          printf("%f의 %d자리 반올림 = %f \n",x,i,banollim(x,i));

     }

}

 

banollim 함수는 실수 x와 반올림할 자리수 dig를 인수로 전달받는데 dig는 0을 기준(Zero Base)으로 하므로 우리가 생각하는 소수점 자리수보다는 하나 더 작다. 즉 dig가 0일 때 소수점 첫 번째 자리를 지정하며 n일 때 n+1자리에서 반올림하여 결국 반올림 후 dig자리까지가 유효한 수로 남게 된다. pow 함수는 음수승도 잘 계산하므로 dig에 음수를 주면 정수부에서 반올림을 할 수도 있다. 실행 결과는 다음과 같다.

 

123.456789의 -2자리 반올림 = 100.000000

123.456789의 -1자리 반올림 = 120.000000

123.456789의 0자리 반올림 = 123.000000

123.456789의 1자리 반올림 = 123.500000

123.456789의 2자리 반올림 = 123.460000

123.456789의 3자리 반올림 = 123.457000

123.456789의 4자리 반올림 = 123.456800

 

지정한 자리수에서 정확하게 반올림되었다. 이렇게 한 번 매크로로 만들어 놓으면 임의의 실수를 임의의 자리에서 반올림할 때 편리하게 활용할 수 있을 것이다. 이 예제에 대한 분석은 여러분들이 직접 해 보기 바라며 매크로가 마음에 들면 종종 애용하기 바란다.

반응형