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);