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