传递给stingstream时截断为double

时间:2015-07-17 08:50:41

标签: c++ double std stringstream

我遇到双精度问题。

std::stringstream ss;
ss << std::setprecision(std::numeric_limits<double>::digits10) << std::numeric_limits<double>::max();

这会将1.79769313486232e+308打印到sting,而实际上,double max是1.79769313486231XXXXe+308。因此,再次读取此字符串流会导致无穷大。

如何截断数字而不是舍入?

1 个答案:

答案 0 :(得分:0)

舍入来自IEEE-754浮点型标准,许多系统都使用该标准。原因是您只能为精确度精确表示数字。其中一个浮点重新定位由IEEE-754标准化。

如果您想在某些特定数字后截断数字,则可以使用rotateX功能,您可以在std::trunc math头文件中找到该功能。

如果您只想在输出流上截断它,那么您可以使用cmath头文件使用setprecision指令。

为了调整舍入操作,您可以设置一些编译器标志。 #include<iomanip>的示例是快速数学编译器标志。 (有关详细信息,请查看此处gcc floating point compiler flags

修改 根据我在这里的评论,你会发现有关将浮动类型转换为非浮动类型然后转换为两个补码的更多信息。 有关详细信息,请查看此处: truncating floats convert to two's complement and further information for rounding-error evaluation

您还可以尝试将浮动内容加载到gcc