고정 소수점이란
프로그래밍을 하다보면 소수점을 고정하여 출력하고 싶을 때가 있다.
가령, 100 / 3 의 값은 3.333333... 으로 무한하다. 하지만 숫자를 무한히 출력할 수는 없으므로 계산기는 자신이 표시할 수 있는 수까지만 반올림하여 표시한다.
C++에서도 다음과 같은 계산을 하였을 때, 기본 출력자인 cout으로 출력 할 때 무한히 출력하지 않고 일정 부분에서 반올림하여 출력하는 것을 볼 수 있다.
double a = 100;
double b = 3;
cout << a / b << endl;
이때, 소수점을 10자리까지 출력하고 싶다면 다음과 같은 방법을 사용하여 고정 소수점을 지정하여 출력할 수 있다.
고정 소수점 사용하기
헤더 파일 #include <iomanip> 에 있는 setpercision() 함수를 이용하여 쉽게 설정할 수 있다.
cout << setpercision(출력하고 싶은 자릿 수);
만약 출력하고자하는 수가 setpercision으로 설정한 수보다 길다면, 맨 뒤에서 반올림하여 출력된다.
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
double a = 1234.123456789;
cout << setprecision(9); //9자리 출력
cout << a << endl;
}
헤더파일을 따로 추가해주고 싶지 않다면, 다음과 같은 cout.precision(); 도 완전히 동일한 기능을 수행한다.
#include <iostream>
using namespace std;
int main() {
double a = 1234.123456789;
cout.precision(9);
cout<< a << endl;
}
fixed : 소수점 이하 고정하기
자릿 수 설정은 다음과 같이 1. 전체 자릿 수 설정, 2. 소수점 이하 자릿 수 설정 두 가지 방법 모두 가능하다.
cout << setprecision(); 과 cout.precision(); 모두 동일하다.
1. 전체 자릿 수로 설정하기 위해서는 위와 같이 cout << setprecision(); 으로 설정한 것이며,
2. 소수점 이하 자릿 수 설정을 위해서는 위의 코드에 cout << fixed; 를 추가하여 설정 가능하다.
예시)
이때, fixed는 setprecision()과 분리하여 작성할 수 있다.
실제 코드를 출력해보면 다음과 같은 것을 확인 할 수 있다.
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
double a = 44.123456789;
cout << setprecision(9); //9자리 출력
cout << "fixed 설정 전: "<< a << endl;
cout << fixed; //fixed 설정
cout << "fixed 설정 후: " << a << endl;
}
위의 결과를 확인하면 fixed 설정 전에는 전체의 9자리만을 출력하여 6번째 소수점부터는 출력되지 않았지만, fixed 설정 이후 소수점 아래 9자리 후가 모두 출력된 것을 확인 할 수 있다.
fixed을 percision 앞에 적으면 소수점 아래를 고정하지만 몇번째자리까지 고정할지는 정하지 않았다는 뜻이며, 따라서 precision을 설정한 이후부터 적용된다.
#include <iostream>
using namespace std;
int main() {
double a = 1234.123456789;
cout << "fixed 고정 전: " << a << endl;
cout << fixed; //fixed 고정
cout << "fixed 고정 후: "<< a << endl;
cout.precision(9); //precision 설정
cout << "precision 지정 후: " << a << endl;
}
fixed 해제하기
다음과 같은 함수를 사용하여 fixed를 해제하고 전체 자리로 고정하여 출력하는 것도 가능하다.
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
double a = 44.123456789;
cout << setprecision(9); //9자리 출력
cout << "fixed 설정 전: " << a << endl;
cout << fixed; //fixed 설정
cout << "fixed 설정 후: " << a << endl;
cout.unsetf(ios::fixed);
cout << "fixed 해제 후: " << a << endl;
}
'Language > CPP&C#' 카테고리의 다른 글
[Visual Studio] 2022 설치 (feat. C++) (0) | 2022.01.08 |
---|---|
[C#] object와 var의 차이 (0) | 2021.05.20 |
[C#] var 키워드 (0) | 2021.05.20 |
[C#] object (boxing/unboxing) (0) | 2021.05.20 |
[C#] Null (0) | 2021.05.18 |
댓글