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

时间:2019-05-31 08:29:45

标签: c++ iostream

我想替换以下实现:

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

(如果需要,请参见How %g works in printf,以获取%g的说明)。

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

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

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

2 个答案:

答案 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::defaultfloatstd::fixed后,可以使用操纵器std::scientific保留默认行为。

Live demo

答案 1 :(得分:2)

这是我在SO上的第一篇文章。因此,如果没有达到要求,请原谅我。

可以使用%gprintf模拟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  

请检查链接https://ideone.com/8ejd0u