데이터 단위를 변경해서 출력해줄 필요가 있었는데
void ConvertToPersent(float data, CString& percentStr, int point)
{
if (point > 5)
point = 2;
float percent = data / 100.0f;
CString formatStr;
formatStr.Format(_T("%%.%df %%%%"), point);
percentStr.Format(strFormat, fPercent);
}
어떤 데이터는 퍼센트로 바꿔준다고 가정하면 MFC에서는 위와 같이 포맷 문자열 자체를 셋팅하는 방법도 있었다.
point 가 소수점 이하 자릿수의 값인데 이 값을 유동적으로 formatStr 에 저장할 수 있었다.
MFC 말고 일반적인 c++에서는 CString의 Format이 없다보니 어떻게 할 수 있나 고민해보니
void ConvertToData(double receiveData, std::string& resultStr, int point) {
if (point > 5)
point = 2;
double resultData = receiveData / 100.0f;
std::ostringstream oss;
oss << std::fixed << std::setprecision(point) << (resultData * 100) << " %";
resultStr = oss.str();
}
이런식으로 문자열 포맷을 지정할 수 있었다.
oss << std::fixed 에서 std::fixed는 부동 소수점 숫자를 고정 소수점 형식으로 출력하도록 스트림을 설정.
<< std::setprecision(point) 는 부동 소수점 숫자의 소수점 이하 자릿수를 설정.
( std::ostringstream oss는 스트림 객체다. )