double val = 0.1;
std::stringstream ss;
ss << val;
std::string strVal= ss.str();
在 Visual Studio 调试器val
中,值为 0.10000000000000001(因为无法表示 0.1)。当val
使用 stringstream 转换时,strVal
等于"0.1"
. 但是,当使用 boost::lexical_cast 时,结果strVal
是"0.10000000000000001"
.
另一个例子如下:
double val = 12.12305000012;
在 Visual Studio 下val
显示为 12.123050000119999,使用 stringstream 和默认精度 (6) 它变为 12.1231。我真的不明白为什么它不是 12.12305(...)。
是否有默认精度,或者 stringstream 是否有特定的算法来转换无法精确表示的双精度值?
谢谢。