传递给stringstream时截断double
Truncate double when passing to stingstream
本文关键字:double stringstream 更新时间:2023-10-16
我有一个双精度问题。
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
。所以再次读取这个stringstream的结果是无穷大。
如何截断数字而不是四舍五入?
四舍五入来自于许多系统使用的IEEE-754浮动型标准。原因是您只能以有限的精度表示数字。其中一个浮点表示是由IEEE-754标准化的。
如果你想截断一些特定数字之后的数字,那么你可以使用std::trunc
函数,你可以在math
中分别找到cmath
头文件。
如果你只想在输出流上截断它,那么你可以使用setprecision
指令使用#include<iomanip>
头文件。
为了调整舍入操作,您可以设置一些编译器标志。gcc
的一个例子是快速数学编译器标志。(有关更多信息,请查看GCC浮点编译器标志)
编辑根据我在这里的评论,您将找到将浮动类型转换为非浮动类型,然后转换为2的补码的进一步信息。更多信息请看这里:删除漂浮转换为二的补码和舍入误差计算的进一步信息
你也可以尝试加载你的浮动到SSE,AVX, ... (depends on your system)
.
相关文章:
- C++在数学计算中将double转换为int
- 在c++中为double类型的数组创建一个unique_ptr
- 当我们进行一些操作时,应该使用什么'std::string'或'std::stringstream'?
- vector<vector<double>> to mxArray using memcpy
- (double) 和 double() 之间的区别
- C++标准是否允许<double>在没有开销的情况下实现 std::可选
- C ++中的StringStream有助于使用向量从字符串中提取逗号分隔的整数,而不是空格分隔的整数,为什么?
- C++ Version Of Double.longBitsToDouble
- 错误:类型"double()"和"double()"的操作数无效到二进制&quo
- 有没有办法在C++的赋值中将"char**"转换为"double"?
- 使用 "stringstream " 将字符串转换为整数
- 为什么 nlohmann/json 序列化 "null" 而不是在 double 上"0"?
- 使用 std::vector<double> 访问由 std::unique_ptr<double[2] 管理的数据>
- std::stringstream 返回字符 *
- 将 std::vector<double> 从 C++ 包装到 C 以在 Swift 中使用
- 错误:无法将"<lambda(double)>"转换为"double(*)(double)"
- 如何正确将"strings"转换为"double"?
- 使用Boost Karma替换STD :: stringstream double到STD :: String Conv
- 当启用了_GLIBCXX_DEBUG时,Stringstream不能使用double
- 传递给stringstream时截断double