0

我正在尝试将 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。

但是,当我使用“固定”标志时,我得到了预期的输出。

sOut << std::fixed

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

谢谢,

4

1 回答 1

1

默认情况下,所有流(不仅仅是wstringstream)都将浮点格式标志设置为ios_base::defaultfloat,它请求您正在观察的格式,这相当于printf's 转换说明符%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”。

于 2013-08-06T20:40:57.617 回答