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



>我有一个问题。我尝试使用设置精度正确打印,但我的结果仍然是错误的。 这是我的输入 数据.txt

(1.1,2) (1.7,3.14) 

这是我的输出结果.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;

最新更新