본문 바로가기
Language/CPP&C#

[C++] 고정 소수점 (소수점 자리 수 지정하여 출력)

by nyangzzi 2021. 6. 1.
반응형

 

고정 소수점이란

 

프로그래밍을 하다보면 소수점을 고정하여 출력하고 싶을 때가 있다.

가령, 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

댓글