본문 바로가기
C,C++/Etc

[C++] 소수점 n번째 자리에서 반올림 하기 | std::round

by woohyeon 2020. 2. 26.
반응형

소수점 n번째 자리에서 반올림 하기


함수를 통해 직접 n번째 자리에서 반올림하는 것은 불가능하며, 첫째 자리에서만 반올림이 가능하다. 따라서 소수점 n번째 자리를 소수점 첫째 자리로 만들고 반올림 후 원상태로 복구할 것이다.

ex) 23.1275 -> 소수점 셋째 자리에서 반올림


(1)  소수점 셋째 자리인 7에서 반올림하려면 우선 7이 소수점 첫째 자리가 되도록 한다.

23.1275 x 10^2 = 2312.7


(2)  (1)의 결과를 <cmath> 헤더의 std::round 함수를 이용해 반올림(첫째 자리에서 반올림하는 함수)

2312.75 -> 2313


(3) 원래 자리수로 되돌리기 위해 (1)에서 곱했던 수(10^2)로 나눈다. (= 0.01 곱하기)

2313 x 0.01 = 23.13 
2313 / 100.0 = 23.13

나누기가 아니라 곱셈으로 할 경우 출력은 잘 되지만 assert로 체크 시 false로 나옴



예제 소스코드)

#include <cmath>

// 소수 넷째 자리에서 반올림하기
void main()
{
   double x = 32.15683;
   x = (std::round(x * 1000)) / 1000.0; // 32.157
}

 




댓글