C, C++ 문법
sprintf(swprintf, _stprintf) 함수에서 실수 문자열 표현시 주의
디버그정
2012. 10. 24. 23:13
sprintf(swprintf, _stprintf) 함수에서 실수 문자열 표현시
소수점 첫째자리까지 표현하게 설정한 경우 자체적으로 소수점 둘째자리에서 반올림처리해서 표시해버린다.
double num = 99.99;
TCHAR szText[256];
_stprintf(szText, _T("%.01f"), num)인 경우
문자열은 "100.0"이 된다. 프로그래머가 반올림을 의도하지 않고 이하 자리는 버림을 원하는 경우 이러한 표현은 난감할 것이다.
이경우
floor 함수를 사용하거나,
숫자의 범위가 정수로 커버가능한 경우 간단히 형 변환식으로 처리할 수 있다.
floor 함수 사용: _stprintf(szText, _T("%.01f"), floor(10. * num) / 10.);
형변환 처리: _stprintf(szText, _T("%.01f"), (double)(int)(num * 10) / 10);