经过我的验证,最后一个的运行结果是3.142,不是你图中显示的结果,你出现如图结果的原因应该是你前面添加了其它流输出格式控制的代码,自己检查下吧。此外,如果你去掉代码中的setiosflags(ios::scientific)的话,就能得到结果3.1416了。
对于浮点数(在VC6里验证得到结论),下面我结合理论和实践给你我小小总结下:
1、默认情况下,系统输出六位有效数字,如m=0.0033201111,直接cout<<m<<endl;的话,结果为:
0.00332011
另外,对于有效数字最后都是0的部分,系统会省略掉。比如,m=0.0033000051;,则输出结果为0.0033,而不是0.00330000。
2、只是使用setprecision(n);控制输出格式的话,结果是输出n位有效数字。另外,对于有效数字最后都是0的部分,系统会省略掉。比如,m=0.0033001141,若只使用setprecision(4);,则输出结果为0.0033,而不是0.003300.
3、本来,当使用了setiosflags(ios::scientific)或setiosflags(ios::fixed)的时候,再使用setprecision(n)的话,表示保留小数点后n位数字。
但是,当使用setiosflags(ios::scientific),再使用setiosflags(ios::fixed)并setprecision(n)时,则此处你想要的setiosflags(ios::fixed)和setprecision(n)一起作用的效果等价于只使用setprecision(n)的效果,即结果精确到n位有效数字,而不是小数点后n位数字。
说的相当具体完整。
建议你使用printf输出浮点数。