[C언어/C++] 소수점 n번째 자리까지 올림, 반올림, 버림 (cell, round, floor)

    double형이나 floot같은 실수형 변수들을 사용하다보면 자릿수가 너무 길어 적절한 시기에 올림이나 반올림, 버림등을 해서 사용하고 싶은 경우가 있습니다. 이런경우 math 헤더안에 있는 cell(올림), round(반올림), floor(버림) 함수를 사용하시면 됩니다. C언어의 경우 반올림을 구하는 round()함수가 따로 없어서 round함수 대신 다른 방법을 사용해야 합니다.

     

    올림(cell), 반올림(round), 내림(floor) 함수 사용법

    #include <math.h> //C언어
    #include <cmath> //C++
    
    //C언어
    double ceil(double n); //올림
    double floor(double n); //내림
    
    //C++
    double ceil(double n); //올림
    float ceil(float n);
    long double ceil(long double n);
    
    double floor(double n); //내림
    float floor(float n);
    long double floor(long double n);
    
    double round(double n); //반올림
    float round(float n);
    long double round(long double n);
    

    s올림(cell), 반올림(round), 내림(floor)함수를 사용하려면 sqrt함수가 포함되어 있는 math헤더를 include해야합니다. C++은 cmath을 포함하시면 됩니다. C언어는 오버로딩이 안되어 리턴값이 double로 고정되어 있고 C++은 dobule, float, long double 이렇게 3가지 값의 반환을 지원합니다.

     

    올림(cell), 반올림(round), 내림(floor) 함수 사용 예제

    #include <stdio.h>
    #include <math.h> //C언어
    #include <cmath> //C++
    
    void main() {
        double pi = 3.141592; 
        
        printf("올림 : %lf\n", ceil(pi));
        printf("내림 : %lf\n", floor(pi));
        printf("반올림 : %lf\n\n", round(pi));
    
        //소수점 둘째 자리까지 올림, 내림, 반올림
        printf("올림 : %lf\n", ceil(pi * 100) / 100);
        printf("내림 : %lf\n", floor(pi * 100) / 100);
        printf("반올림 : %lf\n\n", round(pi * 100) / 100);
    
        //소수점 둘째 자리까지 출력 (0.2lf)
        printf("올림 : %0.2lf\n", ceil(pi * 100) / 100);
        printf("내림 : %0.2lf\n", floor(pi * 100) / 100);
        printf("반올림 : %0.2lf\n\n", round(pi * 100) / 100);
      
    }
    

    사용법은 간단합니다. 위의 예제를 한번 보시면 이해가 바로 되실겁니다. 여기서 위 함수들을 그냥 사용하게 되면 소수점 첫번째 자리에서 연산을 합니다. 그렇기에 소수점 n번째 짜리까지 연산하려면 먼저 (원하는 자릿수 *10)을 곱해주어 자릿수를 왼쪽으로 당긴 후 올림, 내림, 반올림 연산을 하고 다시 원하는 자릿수 *10)을 나누어주어 자릿수를 오른쪽으로 당겨주는 방법을 사용해야 합니다. 이후 출력시 소수점 이하의 자릿수를 조절하기 위해서는 형식지정자 %.f를 사용하시면 됩니다.

     

    C언어에서의 반올림

    #include <stdio.h>
    #include <math.h>
    
    void main() {
    
        double pi = 3.141592;
        int result = (int)(pi + 0.5); //1번 방법
        double result2 = floor(pi + 0.5); //2번 방법
        printf("반올림 : %d\n", result2);
    }
    
    

    위에서 설명했듯 C언어에서는 반올림을 하는 round 함수가 없습니다. 그렇기에 반올림의 특성을 활용하여 구해주어야합니다. 반올림은 5보다 크면 올림을 하고 작으면 내림을 하는 특성이 있죠? 그렇기 때문에 본래의 숫자에서 0.5를 더한 후 floor연산을 해주면 됩니다. 반대로 -0.5를 하고 ceil을 해도 되습니다. 그리고 math함수 include없이 int로 짤라내는 방법으로도 구현이 가능합니다.

     

    3.1의 반올림 = 3.1 + 0.5 = 3.6 -> 3

    3.6의 반올림 = 3.6 + 0.5 = 4.1 -> 4

     

     

     

    댓글(0)

    Designed by JB FACTORY