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

时间:2009-12-21 10:15:56

标签: 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))

2 个答案:

答案 0 :(得分:10)

可能是DBL_MAX的实际值在16位小数位的指数表示法中无法准确表示(假设小数值非常小于大于两个基于的表示但是,使用double初始化DBL_MAX仍然会设置正确的值(由于四舍五入)。 std::istringstream可能会更加挑剔。

编辑:实际上我发现编译器中DBL_MAX的值是1.7976931348623158e + 308,这对我来说很好。你的数字是四舍五入的,因此失败了。

EDIT2: DBL_MAX的十进制格式的确切值由(2 ^ (1023 - 52)) * (2 ^ 53 - 1)给出,不能用16位小数表示。

答案 1 :(得分:1)

如果您使用

double v = 1.79769313486232e+308;
cout << v << endl;

它会给你inf。这意味着现在的文字数实际上超过了两倍。