关于COUT设定输出格式的奇怪问题
程序如下:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{double a=123.456789012345;
cout < < "(1) ";
cout < < a;
cout < < endl;
cout < < "(2) ";
cout < < setprecision(9) < <a;
cout < < endl;
cout < < "(3) ";
cout < < setprecision(6);
cout < < endl;
cout < < "(4) ";
cout < < setiosflags(ios::fixed);
cout < < endl;
cout < < "(5) ";
cout < < setiosflags(ios::fixed) < < setprecision(8) < <a;
cout < < endl;
cout < < "(6) ";
cout < < setiosflags(ios::scientific) < <a;
cout < < endl;
cout < < "(7) ";
cout < <setiosflags(ios::scientific) < <setprecision(4) < <a;
cout < < endl;
return 0;
}
运行结果如下:
(1)123.457
(2)123.456789
(3)
(4)
(5)123.45678901
(6)123.45679
(7)123.5
Press any key to continue
这就遇到问题了,(6)和(7)在程序中已指定用科学记数法输出,结果应该是
(6)1.234568e+002
(7)1.2346e+002
但实际输出却不对。
如果将程序写成:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{double a=123.456789012345;
cout < < "(6) ";
cout < < setiosflags(ios::scientific) < <a;
cout < < endl;
cout < < "(7) ";
cout < <setiosflags(ios::scientific) < <setprecision(4) < <a;
cout < < endl;
return 0;
}
却能得到正确输出:
(6)1.234568e+002
(7)1.2346e+002
Press any key to continue
编译器是VC++6.0 ,系统是WINXP SP2。
请问为什么会出现这个问题呢?如何解决?
THX!
[解决办法]
C++ primer:
与其他操纵符不同,不存在将流恢复为根据被显示值选择记数法的默认状态的操纵符,相反.
我们必须使用unsetf成员来取消scientific或fixed所做的改变.
意思是,你之前这句:cout < < setiosflags(ios::fixed) < < setprecision(8) < <a;
后面要加cout.unsetf(ostream::floatfield);,否则设置的fixed不变.
关于COUT设定输出格式的奇怪有关问题
关于COUT设定输出格式的奇怪问题程序如下:#includeiostream#includeiomanipusingnamespacestdintmain
