c++ - 如何将字符串(包含双最大值)转换为 double

标签 c++ string double

我在转换“普通” 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))

最佳答案

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

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

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

关于c++ - 如何将字符串(包含双最大值)转换为 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1939284/

相关文章:

c - fscanf 不破坏完全拆分文件

c++ - 澄清 "object pool"模式?

c++ - 是否有必要通过常量引用传递迭代器

java - 如果我们更改字符串值,字符串池如何管理引用?

c# - 在文本文件中搜索字符串的更快方法

双引号中的 PHP 静态变量

c++ - 将项目添加到双向链表的后面时遇到问题

c++ - C++中的字符串处理和内存管理

c++ - STL 容器和内存泄漏

string - 向 Lua 添加裸词