繁体   English   中英

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

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

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

(1.1,2) (1.7,3.14) 

这是我的 output 结果.txt

1.1,    2, 
0.7,    3.1, 

这是 output,我期待

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默认影响打印的有效位数,而不是打印的小数位数。 为此,您必须切换到固定的 output 模式。 您还需要在 output 之前设置精度,而不是之后的数字。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM