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

Mat*_*her 9 c++ iostream

我想替换以下实现:

float value = 3.14;
printf("%g", value);
Run Code Online (Sandbox Code Playgroud)

(有关说明,请参见%g在printf中的%g工作方式)。

但是我还没有在流操纵器中找到同等的操纵器,仅对固定操纵器或科学操纵器而言,而并非两者中最短的操纵器(https://en.cppreference.com/w/cpp/io/manip/fixed)。这是否存在或是否存在“简单”的实现方式?

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

  • 如果%.6g使用544666.678,则写为544667 ,
  • 使用时将相同的数字写为5.4467E + 5 %.5g

L. *_* F. 6

%g是默认行为。例如:

#include <iomanip>
#include <iostream>

int main()
{
    std::cout << std::setprecision(6) << 544666.678 << "\n"
              << std::setprecision(5) << 544666.678 << "\n";
}
Run Code Online (Sandbox Code Playgroud)

输出:

544667
5.4467e+05
Run Code Online (Sandbox Code Playgroud)

设置或std::defaultfloat后,可以使用机械手保留默认行为。std::fixedstd::scientific

现场演示