用流操作替换 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 问题中的一些示例:
- 544666.678如果用
%.6g
写成544667,
- 使用
%.5g
时,同样的数写成5.4467E+5。
%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::fixed
或 std::scientific
后,操纵器 std::defaultfloat
可以保留默认行为。
我想替换以下实现:
float value = 3.14;
printf("%g", value);
(如果需要,请参阅 %g
的解释)。
但我还没有在流操纵器中找到等效项,仅适用于固定的或科学的,但不是两者中最短的 (https://en.cppreference.com/w/cpp/io/manip/fixed)。这是否存在或是否有 "simple" 方法来实现它?
链接的 SO 问题中的一些示例:
- 544666.678如果用
%.6g
写成544667, - 使用
%.5g
时,同样的数写成5.4467E+5。
%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::fixed
或 std::scientific
后,操纵器 std::defaultfloat
可以保留默认行为。