为什么 std::numeric_limits<float>::min() 在流式传输到具有不同功能的输出时行为不同?

why does std::numeric_limits<float>::min() differ in behavior when streamed to output with different functions?

我在

中遇到了一个奇怪的行为
 std::numeric_limits<float>::min()

当我调用 std::cout 时,我得到的输出值为 1.17549e-38

相比之下我使用

printf("%f", std::numeric_limits<float>::min());

我得到的值为 0.000000。

请注意,当我计算 (std::numeric_limits<float>::min() == std::numeric_limits<float>::min()) 时,我得到 true(这是直观且合乎逻辑的)

那么,有人可以向我解释一下输出中的这种差异吗?

cppreference for numeric_limits:

std::numeric_limits<float>::min()returnsFLT_MIN

使用%f显示的返回值(实际上不是0)实际上是格式化为固定小数位数。 '%f' 格式以固定格式打印 6 位小数。

您可以使用:

%e=gives the scientific notation
%g=handles large floating numbers