用流操作替换 printf("%g", value)

Replacing printf("%g", value) with a stream manipulation

我想替换以下实现:

float value = 3.14;
printf("%g", value);

(如果需要,请参阅 了解 %g 的解释)。

但我还没有在流操纵器中找到等效项,仅适用于固定的或科学的,但不是两者中最短的 (https://en.cppreference.com/w/cpp/io/manip/fixed)。这是否存在或是否有 "simple" 方法来实现它?

链接的 SO 问题中的一些示例:

%g 是默认行为。例如:

#include <iomanip>
#include <iostream>

int main()
{
    std::cout << std::setprecision(6) << 544666.678 << "\n"
              << std::setprecision(5) << 544666.678 << "\n";
}

输出:

544667
5.4467e+05

在设置 std::fixedstd::scientific 后,操纵器 std::defaultfloat 可以保留默认行为。

Live demo