为什么std::cout打印非常小的科学符号值,而不是四舍五入到零

Why does std::cout print REALLY small scientific notation values instead of rounding to zero?

本文关键字:四舍五入 符号 打印 cout std 非常 为什么      更新时间:2023-10-16

如何让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,后者可能无法提供你想要的灵活性。没有格式选项允许使用科学记数法,但可以在任意阈值以下截断小数字。为此,您必须使用自己更改值的第一个选项。