<개인공부>/[C언어, C++]

[C언어/C++] 올림, 내림, 반올림 (floor, ceil) 함수

BlockDMask 2017. 8. 11. 13:50
반응형

안녕하세요 BlockDMask 입니다.

오늘은 올림, 내림 을 할수있는 ceil, floor 함수에 대해서 알아보고.

floor 함수를 통해서 반올림을 하는 것 까지 보도록 하겠습니다.

C의 함수들이 C++에 호환이 되어서 C에서 쓸때와 C++에서 쓸때의 차이점은
헤더파일, 
메서드 오버로딩 (메서드, 함수 이름이 같아도 인자가 다르면 선언이 되는것) 이 있습니다.
오버로딩은 C++에서만 지원합니다.

글 순서는
헤더파일 소개 -> 함수(메소드)가 선언된 원형과 사용법 -> 실제 예시 -> + 알파 순으로 가겠습니다.
그럼 시작하겠습니다.


(C++ 반올림(round)함수 포스팅 [바로가기])

(C++ 버림(trunc)함수 포스팅 [바로가기])


0. 헤더파일(header)


[C 언어] : <math.h>

[C++] : <cmath>


1. 함수 원형과 사용법

  • [C언어] : C언어는 함수 오버로딩을 지원하지 않으므로 double 타입으로만 존재합니다.
    double
    ceil(double n);
    double
    floor(double n);

  • [C++] : C++에서는 method 이름이 달라도 method를 선언할 수 있는 오버로딩을 지원합니다.
    double
    ceil (double x);
    float ceil (float x);
    long double ceil (long double x);

    double floor (double x);
    float floor (float x);
    long double floor (long double x);

  • 사용법

  1. 올림 함수 : ceil()

    ex) result = ceil(4.2);
    -> result = 5.0

  2. 내림 함수 : floor()

    ex) result = floor(4.2);
    -> result = 4.0

  • 내림함수 floor()를 이용한 반올림 함수 구현
    ->
     floor(N)에 N값에 0.5를 더해서 사용하면 됩니다.
    -> floor(N + 0.5); //반올림이 됩니다!


    ex1) floor를 통해서 4.2의 반올림을 구해보자.
    result = floor(4.2 + 0.5); -> 내부 값 4.7이 되므로 -> floor를 통해서 내림을 하게되면
    -> result = 4.0 가 나옵니다.

    :: 결론적으로 "
    4.2의 반올림 = 4.0"이 되므로 floor() 함수를 통해서 반올림 구현 성공


    ex2)
    floor함수를 통해서 4.7의 반올림을 구해보자.
    result = floor(4.7 + 0.5); -> 내부 값 5.2 가 되므로 -> floor를 통해서 내림을 하게되면
    -> result = 5.0 가 나옵니다.

    :: 결론적으로 "
    4.7의 반올림 = 5.0"
    되 므로 floor() 함수를 통해서 반올림 구현 성공


2. 예시


T1) [C언어] 양수일때

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<stdio.h>
#include<math.h>
 
int main(void){
    //양수 
    double n1 = 4.2;
    double n2 = 4.2;
    double n3 = 4.2;
    double n4 = 4.7;
    
    //올림 
    printf("%0.1lf\n", ceil(n1));
    
    //내림 
    printf("%0.1lf\n", floor(n2));
    
    //반올림 
    printf("%0.1lf\n", floor(n3 + 0.5));
    printf("%0.1lf\n", floor(n4 + 0.5));    
    
    return 0;    
}
cs


>결과 

T2) [C++] 음수일때


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include<iostream>
#include<cmath>
 
using namespace std;
int main(void){
    //음수 
    double     n1 = -4.2;
    float     n2 = -4.2;
    double     n3 = -4.2;
    float     n4 = -4.7;
 
    //소수점 출력.    
    cout.setf(ios::fixed, ios::floatfield);
 
    //소수점 아래 1자리 까지 
    cout.precision(1);    
 
    //올림 
    cout << ceil(n1) << endl;
    
    //내림 
    cout << floor(n2) << endl;
    
    //반올림 
    cout << floor(n3 + 0.5<< endl;
    cout << floor(n4 + 0.5<< endl;
        
    return 0;    
}
cs


>결과


**추가지식

3. 반올림 함수(메소드) : round

- 사실 반올림 함수 round가 있습니다. 하지만 C++11에서 지원을 하기 때문에, 지원안되시는 분들이 있을까봐 반올림은 floor 함수를 이용하여 구하는 방법을 소개했습니다.


(C++ round 반올림 함수 포스팅 [바로가기])

(C++ trunc 버림 함수 포스팅 [바로가기])


<참고>

http://www.cplusplus.com/reference/cmath/floor/

http://www.cplusplus.com/reference/cmath/ceil/

감사합니다.

도움되셨다면 공감버튼 한번 부탁드립니다.

반응형