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()를 통해 소수점 이하의 값을 처리할 수 있습니다.
'Programming > C&CPP' 카테고리의 다른 글
C++ fstream 객체를 통한 파일 입출력 (0) | 2021.03.26 |
---|---|
C++ string (문자열)의 부분 문자열 추출 (substr) (0) | 2021.02.26 |
C++ string (문자열) 소문자, 대문자 변환 (0) | 2020.11.06 |
C++ 벡터(vector) 혹은 배열에서 최대값, 최소값 찾기 (0) | 2020.09.14 |
C++ string을 int로 변경하는 방법 (0) | 2019.11.18 |