-
C++) 원하는 자리수 까지 출력하기 (반올림, 올림, 내림)알고리즘과 언어/c++ 2022. 2. 7. 21:07
https://www.acmicpc.net/problem/2865
해당 문제에서 출력을
다음과 같이 소수점 두번째 자리에서 반올림 해야 했다.
또한, 반올림 하고 소숫점 값이 0이더라도 출력해야 했다.
1) 기본적인 반올림, 올림, 내림
<cmath>가 필요하고
기본적으로 반올림은 round( 숫자 ), 올림은 ceil( 숫자 ), 내림은 floor( 숫자 )이다.
#include <iostream> #include <cmath> using namespace std; int main() { float num = 3.47; cout << round(num) << "\n"; cout << ceil(num) << "\n"; cout << floor(num) << "\n"; } //3 //4 //3
다음의 함수들은 소숫점 1자리에서 반올림한다.
그렇다면 소숫점 n 자리에서 반올림은 어떻게 할까?
자리수를 조정하여 다음 함수를 이용하고, 다시 자릿수를 원래대로 놓아주면 된다.
예를 들어 소숫점 2번째 자리에서 반올림/올림/내림을 하려면,
10을 곱한 후에 다음 함수들을 이용하고, 다시 10으로 나눠서 반환하면 된다.
#include <iostream> #include <cmath> using namespace std; int main() { float num = 3.47; float num1 = round(10 * num) / 10; float num2 = ceil(10 * num) / 10; float num3 = floor(10 * num) / 10; cout << num1 << "\n"; cout << num2 << "\n"; cout << num3 << "\n"; } //3.5 //3.5 //3.4
하지만 다음 함수들은 소숫점이 0이면 따로 0을 표시하지 않는다.
num에 3.06을 넣어보면
#include <iostream> #include <cmath> using namespace std; int main() { float num = 3.06; float num1 = round(10 * num) / 10; float num2 = ceil(10 * num) / 10; float num3 = floor(10 * num) / 10; cout << num1 << "\n"; cout << num2 << "\n"; cout << num3 << "\n"; } //3.1 //3.1 //3
그렇다면 3 이 아닌, 3.0이 표시되기 위해서는 어떻게 해야할까?
fixed 와 precision을 이용할 수 있다.
1. precision은 n개의 숫자만 나타내는 함수이고 (자동으로 반올림이 된다.)
2. fixed는 소숫점을 고정시키는 함수이다.
소숫점을 고정시킨 후(fixed), precision을 하면 소숫점 n자리 까지 표시할 것을 명령한다. (이 때도 자동으로 반올림이 되므로 올림/내림 처리는 앞에서 진행한 후 마지막으로 이 함수로 표현해야 할 것이다.)
#include <iostream> #include <cmath> using namespace std; int main() { float num = 3.4356; cout.precision(4); cout << num << endl; //앞에서 부터 4개 (3.435 까지 출력하며 반올림 때문에 3.436) cout << fixed; //소수점 고정 cout.precision(4); cout << num << endl; //.(소수점)부터 뒤에 4개 출력 float num2 = 3.402; cout.precision(2); //0까지 출력해준다. cout << num2; } // 3.436 // 3.4356 // 3.40
'알고리즘과 언어 > c++' 카테고리의 다른 글
C++ ) 백준 3055 탈출 (0) 2022.02.16 C++) 백준 1780 종이의 개수 (0) 2022.02.08 ios_base::sync_with_stdio(false); cin.tie(NULL); (0) 2021.11.14 정규표현식 <regex> (0) 2021.09.20 최대값, 최소값 max_element min_element (프로그래머스 프린터) (0) 2021.08.19