如何将字符串(包含double max)转换为double

Nik*_*nić 2 c++ string double

转换"正常"双值,但我无法转换numeric_limits<double>::max()或DBL_MAX字符串表示没有问题?

std::string max = "1.79769313486232e+308";

std::istringstream stream(max);
double value;

// enters here, failbit is set
if (!(stream >> value))
Run Code Online (Sandbox Code Playgroud)

And*_*nck 10

难道是这样的实际价值DBL_MAX不指数形式与16位小数精确表示(比如十进制值略微高于两个基于represenation大),但初始化doubleDBL_MAX将仍然设置正确的值(由于四舍五入).std::istringstream可能会有点挑剔.

编辑:其实我发现DBL_MAX我的编译器的值是1.7976931348623158e + 308这对我来说很好.你的号码是圆的,略大,因此失败了.

EDIT2:DBL_MAX十进制形式的精确值由(2 ^ (1023 - 52)) * (2 ^ 53 - 1)16位小数表示.