반응형
소수점 n번째 자리에서 반올림 하기
함수를 통해 직접 n번째 자리에서 반올림하는 것은 불가능하며, 첫째 자리에서만 반올림이 가능하다. 따라서 소수점 n번째 자리를 소수점 첫째 자리로 만들고 반올림 후 원상태로 복구할 것이다.
ex) 23.1275 -> 소수점 셋째 자리에서 반올림
(1) 소수점 셋째 자리인 7에서 반올림하려면 우선 7이 소수점 첫째 자리가 되도록 한다.
23.1275 x 10^2 = 2312.75
(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
}
'C,C++ > Etc' 카테고리의 다른 글
Visual Studio C++ 17 사용하도록 설정하기 (0) | 2020.06.25 |
---|---|
메모리 정렬과 패킹 (2) | 2020.05.19 |
[C++] 비트 연산자로 N번째 비트 변경하기 (0) | 2020.03.11 |
[C++] 한 줄 짜리 지식 모음 (0) | 2020.01.20 |
내가 따라하는 C++ 코딩표준 (0) | 2020.01.02 |
댓글