[C++, MFC] 문자열 스트림 포맷

빵욱·2024년 7월 5일

데이터 단위를 변경해서 출력해줄 필요가 있었는데

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++에서는 CStringFormat이 없다보니 어떻게 할 수 있나 고민해보니

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는 스트림 객체다. )

profile
rove drink eat

0개의 댓글