为什么std::cout打印非常小的科学符号值,而不是四舍五入到零
Why does std::cout print REALLY small scientific notation values instead of rounding to zero?
如何让std::cout将一个非常小的双精度值四舍五入为零,而不是打印像:这样的值
6.94532807444049e-310
或
6.95321306220521e-310
我注意到许多过长的科学符号,可能是零,似乎有e-310
有多种方法可以对数字进行四舍五入。如果你想要最接近的整体,你应该只使用int.
另一种方法是使用头#include iomanip并使用"setprecision(2)"设置宽度。
将浮点值插入流的插入操作会产生较小的结果,因为插入的值较小。格式化操作的工作是显示值,而不是决定对其进行什么更改,例如将小值更改为零。
如果您希望小值为零,您可以:
- 在将值插入流之前调整该值,或者
- 请求不同的值格式
如果您想通过将低于某个阈值的值转换为零来调整值,可以使用以下代码:
if (abs(x) < 1e-100) x = 100;
要更改格式,一个选项是使用fixed
格式,可选择使用<iomanip>
:中的setprecision
设置精度
std::cout << std::fixed << std::setprecision(8);
如果你想用科学记数法(比如10−20)显示小数字,但不是很小的数字(比如10−200,后者可能无法提供你想要的灵活性。没有格式选项允许使用科学记数法,但可以在任意阈值以下截断小数字。为此,您必须使用自己更改值的第一个选项。
相关文章:
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 将无符号char*转换为std::istream*C++
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- vscode g++链路故障:体系结构x86_64的未定义符号
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 使用gcc从静态链接的文件中查找可选符号
- C++中无符号字符溢出
- 使用无符号字符数组有效存储内存
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- VC++本机单元测试,找不到调试符号
- 为什么我必须在C++中添加一个赋值符号来声明一个数组
- 检查TCHAR数组输入是否为带符号整数C++
- 用符号版本替换对函数的所有调用
- 未解析的外部符号_MsiLocateComponentW@12.
- 如果我想将一个无符号整数四舍五入到最接近的更小或等于偶数的整数,我可以除以2然后乘以2吗
- 为什么std::cout打印非常小的科学符号值,而不是四舍五入到零
- 将无符号整数四舍五入为2的幂序列