正确编写和打印复数精度 (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;
我有问题。我尝试使用 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;