正确编写和打印复数精度 (cout) 的 C++ 问题?

C++ problem with properly writing and printing precision (cout) in complex numbers?

我有问题。我尝试使用 setprecision 正确打印,但我的结果仍然是错误的。 这是我的输入 data.txt

(1.1,2) (1.7,3.14) 

这是我的输出result.txt

1.1,    2, 
0.7,    3.1, 

这是我期望的输出

1.10, 2.00
1.70, 3.14

这是我的代码

#include <iostream>
#include <fstream>
#include <cstdlib> 
#include <iomanip>

using namespace std;

class Complex_num {
    double real, imag;
public:
    Complex_num(double r=0,double i=0){
    real=r;
    imag=i;
    }


    friend std::ostream& operator<<(std::ostream& os,  const Complex_num& c)
    {
        return os << c.real << ",    " << c.imag << setprecision(2) << ',' << ' '<<endl;
    }
    friend std::istream& operator>>(std::istream& is, Complex_num& cn){
        char c;
        return is>>c>>cn.real>>c>>cn.imag>>c>>c; 
    }
};


int main(int argc, char* argv[])
{

    char c;
    ifstream read(argv[1]);
    if (!read)
        { cerr << "Open error: " << argv[1] << endl; exit(1);}
    ofstream write(argv[2]);
    if(!write) { cerr << "Open error: " << argv[2] << endl; exit(2);}
    read.clear();
    read.seekg(0);
    Complex_num x1;
    read >> x1;
    write << x1;
    cout << x1;
    Complex_num x2;
    read >> x2;
    write << x2;
    cout << x2;

    return 0;
} 

为什么这不起作用,我使用设置精度,但我得到的不是 2.00,而是 2,而不是 3.14,我得到的是 3.1。为什么?

setprecision 默认影响打印的有效位数,而不是打印的小数位数。为此,您必须切换到固定输出模式。此外,您需要在输出数字之前设置精度,而不是之后。

return os << fixed << setprecision(2) << c.real << ",    " << c.imag << ',' << ' '<<endl;