c++에서 소수의 자릿수 표현에 대한 방법.

<크래프톤 정글 TIL 기록사항중, 알고리즘과 관련된 부분이므로 c++ 알고리즘 문제 해결 부분에도 같이 포스팅한다>

 

boj 4344번 문제에서,

 

 

예제출력에서 원하는 형식이 실수에서 소수 넷째자리에서 반올림하여 소수 셋째자리 표현이었는데, 

이걸 c++에서 어떤식으로 표현해야 하는지에 대해서 잘 모르겠어서 방법들을 찾고 사용하는데 시간이 제법 걸렸다. 

그 내용을 간략하게 기록해두고 다음에 c++에서 소수 표현에 대한 부분이 나오면 다시 확인해보면서 떠올려보자. 

 

일단 처음 알게된 방법은 round()함수를 이용하는 것이었는데, 이건 소수자리에서 반올림이 아니라, 일의자리로 반올림 해주는 함수였어서, 이 round()함수를 활용하여서 내가 원하는 소수 자리에서 반올림 하기 위해서는, 먼저 pow()함수를 활용하여서 pow(10,3)처럼 실행해서 내가 반올림 하려는 소수 넷째자리를 소수 첫재짜리로 자릿수를 옮겨주고,

그리고 난뒤에 round()함수를 사용해서 반올림을 한뒤, 다시 pow(10,3)로 나누어서 소수 3째자리로 만들어주어서 출력해주는 방법을 알게되어서 사용할 수 있었다. 

그런데 이렇게 출력했을때는, 딱 떨어지는 수, 여기서 예를 들면 40%의 경우, 소수 셋째자리까지 표현하고 싶었는데 지속적으로 40.000% 가 아니라 40%로 나타나서 내가 원하는 표현법으로 나타낼 수 없었다.

그래서 다른 방법을 찾아보았을때, 

c++에 fixed를 활용하여서 표현되는 double 형태의 수의 자리수를 몇번째 자리까지 반올림해서 표현할지를 설정할 수 있었는데, 

그 방법의 사용법을 chatGPT를 통해서 검색해보았을때 나온 방법을 첨부해보면, 

이런 방식으로 소수 셋째 자리까지 반올림으로 표현할 수 있었고, 

이 방법을 통해서 문제를 출력하면 내가 원하는 40.000까지 출력해낼 수 있었다. 

 

앞으로 c++에서 소수 자릿수에 대한 표현 문제가 나오면, int로 설정한 변수들을 double로 캐스팅해서 계산하는것을 잊지말고, 그리고 나서 소수표현으로 출력할때는 cout<<fixed<<setprecision(); 형태로 원하는 자릿수를 설정하여서 소수표현 하는 법, 그리고 이와 관련하여서 혹시 추가적으로 

round()함수의 사용, pow()함수의 사용 등에 대해서 떠올려 보도록 하자. 

 

마지막에 신경써주었던 부분들에 대한 코드는 이렇게 작성하였고, 

cout<<fixed<<setprecision(3); 부분을 잘 기억해두도록 하자. 

 

  Comments,     Trackbacks