오랜만에 알고리즘 문제를 풀다가, 현대 소프티어 챌린지 문제였는데, 학생들 성적의 구간 평균을 구하는 문제였고 소수점 둘째 자리까지 반올림을 해서 출력을 하도록 하는 문제였다.
반올림을 하는 방법은 원래 알고 있어서 아래와 같이
#include <iostream>
#include <cmath>
using namespace std;
int main(){
double a = 10.456;
cout << round(a) << '\n';
return 0;
}
이렇게 하면 기본적으로 소수점 첫번째를 기준으로 반올림을 해서 결과는 10이 나오게 된다.
만약 소수점 첫번째 자리까지 보이고 싶다면 아래와 같은 방법으로 하면 된다.
#include <cmath>
#include <iostream>
using namespace std;
int main() {
double a = 10.456;
cout << round(a * 10) / 10 << '\n';
return 0;
}
이렇게 하면 10이 아닌 10.5가 출력이 된다.
그렇다면 만약 double a에 10을 할당해주고, 출력이 단순히 10이 아니라 두번째 자리 소수점까지 10.00으로 출력이 되도록하려면 어떻게 해야할 까?
바로 iomanip (input output manipulator - 입출력 조정자) 헤더를 사용해, fixed와 setprecision을 사용해주면 된다.
fixed: 고정 소수점 표기법으로 출력 의미
setprecision(n): 소수점 이하 n자리까지 출력 의미
따라서 아래와 같이 사용하면 결과 값이 단순히 10으로 출력되는 것이 아닌 10.00으로 출력이 된다.
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
int main() {
double a = 10;
cout << fixed << setprecision(2) << a << '\n';
return 0;
}
이렇게 방법을 알고나서 문제는 쉽게 풀 수 있었다.