将setiosflags(ios::fixed)结合setprecision()使用控制输出结果,但是输出精度并符合setprecision的设置精度

在学习使用iomanip文件里的控制函数setprecision()及setiosflags(ios::fixed)控制cout流输出输出结果时,遇到问题:同样的格式采用相同的精度输出同一个变量,输出的有效数字不同。

代码如下:

#include 
#include //"io"代表输入输出,"manip"是manipulate的缩写,该头文件用于流输入输出的控制
using namespace std;
void main(){
    double a=123.456789012345;
    double b=123456789;
    double c=123.0000001;
    cout<<a<<<endl;//将a以10位精度的格式输出
    cout<;
    cout<<setprecision(6);//将输出精度返回(重置)为6
//    cout<(8)<<a<以小数点后固定8位精度的格式输出
    cout<<setiosflags(ios::scientific)<(ios::scientific)<<setprecision(4)<(9)<<b<
运行结果及报错内容

img

我的解答思路和尝试过的方法

最后一行语句本来是想输出变量c,
原本最后一行语句是

    cout<ios::fixed)<8)<;

但是输出结果是123

img


所以后来尝试把变量改成a,看看是由于赋给变量c的值的原因还是其他原因,结果运行结果就是第一张截图的结果,同样代码同样变量,输出值精度不同。

我想要达到的结果

不明白为什么会这样,希望大家可以求解!

你应该使用std::fixedstd::scientific,而不是setiosflags(ios::fixed)setiosflags(ios::scientific)