본문 바로가기

Programming/C&CPP

C++ 소수점 올림/반올림/내림 방법

반응형

C++에서 소수점을 올림 하거나 내림, 혹은 반올림해야 하는 경우가 있습니다.

C++의 cmath 헤더에는 올림/반올림/내림을 위한 ceil, floor, round함수가 존재합니다.

C++에서 올림/반올림/내림을 하는 방법을 알아보겠습니다.

 

1. 올림/반올림/내림 방법

cmath 헤더에는 ceil()과 floor() 함수가 존재합니다.

ceil() 함수는 올림을 위한 함수이며 floor() 함수는 내림을 위한 함수입니다.

그리고 C++11에서 반올림을 위한 round() 함수가 추가되었습니다.

#include <cmath>
#include <iostream>
#include <stdio.h>

using namespace std;

void main()
{
    float float_num = 2.3;
    double double_num = 6.7;

    const char* format = "original: %.1f, ceil: %.1f, round: %.1f, floor: %.1f\n";

    printf(format, float_num, ceil(float_num), round(float_num), floor(float_num));
    printf(format, double_num, ceil(double_num), round(double_num), floor(double_num));
    
    cout << lround(float_num) << endl;
    cout << lround(double_num) << endl;
}

원래 값과 함께 올림 결과(ceil), 반올림 결과(round), 내림 결과(floor)가 순서대로 표시됩니다.

실행 결과

소수점이 5 미만일 때는 round()와 floor()가 동일한 값을 리턴합니다.

소수점이 5 이상일 때는 round()와 ceil()이 동일한 값을 리턴합니다.

그리고 lround() 함수는 반올림 결과를 long 타입을 변환해서 리턴합니다.

다만 기본 함수는 소수점 첫째 자리를 반올림하는 기능만 제공합니다.

두 번째 자리 이후를 반올림하고 싶은 경우 별도의 방법이 필요합니다.

 

2. 두 번째 자리 이후 올림/반올림/내림 방법

두 번째 자리 이후를 연산하려면 10의 배수를 곱한 후 함수를 호출하면 됩니다.

결과를 다시 10의 배수로 나눠주면 원하는 값을 얻을 수 있습니다.

#include <cmath>
#include <iostream>
#include <stdio.h>

using namespace std;

void main()
{
    float float_num = 2.333;
    double double_num = 6.7777;

    const char* format = "original: %.2f, ceil: %.2f, round: %.2f, floor: %.2f\n";

    printf(format, float_num, ceil(float_num * 100) / 100, 
        round(float_num * 100) / 100, floor(float_num * 100) / 100);
    printf(format, double_num, ceil(double_num * 100) / 100, 
        round(double_num * 100) / 100, floor(double_num * 100) / 100);
}

소수점 세 번째 자리에서 연산하려면 100을 곱한 값으로 함수를 호출한 후 결과를 100으로 나누면 됩니다.

다음과 같이 결과가 표시됩니다.

실행 결과

소수점 n번째에서 반올림 등을 하고 싶은 경우 10^(n - 1)을 곱한 후에 나눠주면 됩니다.

해당 공식을 이용해서 별도의 올림/반올림/내림 함수를 작성해서 사용해도 됩니다.

C++의 기본 함수인 ceil(), round(), floor()를 통해 소수점 이하의 값을 처리할 수 있습니다.

반응형