2013-08-06 2 views
0

문자열을 3 바이트로 변환하려고합니다. 다음은 내 코드입니다.wstringstream 기본 형식 플래그

double b = 0xFFFFFF;  
std::wstring ss; 
std::wstringstream sOut; 

    sOut << b; 
    ss = boost::lexical_cast<std::wstring>(sOut.str()); 

출력이 16777215로 예상됩니다. 그러나 "ss"의 값은 1.67772e + 007입니다.

그러나 "고정"플래그를 사용하면 예상되는 출력이 표시됩니다.

sOut << std::fixed 

제 질문은 기본적으로 wstringstream에 "과학적"플래그가 있는지 여부입니다.

감사합니다,

답변

1

모든 스트림 (단지 wstringstream)는 부동 소수점 형식 플래그 printf의 변환 지정자 %g에 해당 당신이 관찰하고있는 서식을, 요청 기본적으로 ios_base::defaultfloat로 설정했습니다.

부동 소수점 수를 나타내는 두 인수 스타일 F 또는 E 변환된다

%의 g의 C의 설명을 인용 (a G 변환 지정자의 경우 스타일 또는 F 또는 마) 변환 된 값과 정밀도에 따라 0이 아닌 경우 P는 정밀도와 같고, 정밀도가 생략되면 6, 정밀도가 0이면 1입니다. 이어서, 스타일 E로 전환은 X의 지수 가지는 경우 :

  • 경우 P> X> = -4, 변환이 스타일 F (또는 F) 및 정밀 (P)으로는 - (X + 1).
  • 그렇지 않으면, 변환 스타일 전자 (또는 E) 및 정밀 P와 함께입니다 - 귀하의 경우 1.

는 "스타일 전자"를 선택한다.