我正在尝试将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默认是否有“科学”标志?
谢谢,
答案 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”。