我想替换以下实现:
float value = 3.14;
printf("%g", value);
(如果需要,请参见How %g works in printf,以获取%g
的说明)。
但是我还没有在流操纵器中找到等效项,仅适用于固定操纵器或科学操纵器,而不是两者中最短的操纵器(https://en.cppreference.com/w/cpp/io/manip/fixed)。是否存在或有实现此目的的“简单”方法?
链接的SO问题中的一些示例:
%.6g
,%.5g
时,相同的数字写为5.4467E + 5。答案 0 :(得分:6)
%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::defaultfloat
或std::fixed
后,可以使用操纵器std::scientific
保留默认行为。
答案 1 :(得分:2)
这是我在SO上的第一篇文章。因此,如果没有达到要求,请原谅我。
可以使用%g
和printf
模拟std::scientific
的 std::defaultfloat
输出。
#include<iostream>
#include <sstream>
#include <cmath>
#include <iomanip>
int main()
{
double c = 544666.678;
std::cout << std::scientific << c << std::endl;
std::cout << std::defaultfloat << c << std::endl;
std::cout << std::setprecision(5) << c <<std::endl;
std::cout << std::setprecision(6) << c << std::endl;
}
o/p -
5.446667e+05
544667
5.4467e+05
544667