wstringstream默认格式标志

时间:2013-08-06 20:34:34

标签: c++

我正在尝试将3字节双精度转换为字符串。以下是我的代码。

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

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

我预计输出为16777215.但“ss”的值为1.67772e + 007。

然而,当我使用“fixed”标志时,我得到预期的输出。

sOut << std::fixed

我的问题是wstringstream默认是否有“科学”标志?

谢谢,

1 个答案:

答案 0 :(得分:1)

默认情况下,所有流(不只是wstringstream)都将浮点格式标记设置为ios_base::defaultfloat,这会请求您正在观察的格式,这相当于printf的转换说明符%g

引用C对%g的描述

  

表示浮点数的双参数按样式f或e转换(或者在G转换说明符的情况下转换为F或E型),具体取决于转换的值和精度。设P等于非零的精度,如果省略精度则设为6,如果精度为零则设为1。然后,如果具有样式E的转换将具有指数X:

     
      
  • 如果P> X> = -4,转换为样式f(或F)和精度P - (X + 1)。
  •   
  • 否则,转换采用样式e(或E)和精度P-1。
  •   

在您的情况下,选择“样式e”。