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

    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默认是否具有“ scientific”标志?

谢谢,

最佳答案

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

引用C对%g的描述


  表示浮点数的双精度参数根据转换的值和精度以f或e样式(或在G转换说明符的情况下以F或E样式)转换。如果非零,则使P等于精度;如果省略精度,则使P等于6;如果精度为零,则使P等于1。然后,如果样式E的转换的指数为X:
  
  
  如果P> X> = -4,则转换采用样式f(或F)和精度P-(X +1)。
  否则,将使用样式e(或E)和精度P-1进行转换。
  


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

09-16 15:44