c++用了fixed与setprecision()后,怎么在下一次输出时以正常方式输出?

比如我用了cout<<fixed<<setprecision(1)<<a;后然后cout.unsetf(ios_base::fixed);但是cout<<3.5;时输出的... 比如我用了cout<<fixed<<setprecision(1)<<a;后
然后cout.unsetf(ios_base::fixed);
但是cout<<3.5;时输出的是4,所以如何把setprecision的效果也清楚??
或者如果有方法能把所有的效果都清楚更好~
展开
 我来答
tattackor
推荐于2018-05-06 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:891万
展开全部
  1. 使用cout.unsetf(ios::adjustfield|ios::basefield|ios::floatfield) ;清除所有与域相关,与基数相关,与浮点相关的设置。

  2. 使用setprecision(n)可控制输出流显示浮点数的数字个数。C++默认的流输出数值有效位是6。
      如果setprecision(n)与setiosflags(ios::fixed)合用,可以控制小数点右边的数字个数。setiosflags(ios::fixed)是用定点方式表示实数。
      如果与setiosnags(ios::scientific)合用, 可以控制指数表示法的小数位数。setiosflags(ios::scientific)是用指数方式表示实数。
      例如,下面的代码分别用浮点、定点和指数方式表示一个实数:

        //*********************
        //**  ch2_1.cpp   **
        //*********************

        #include <iostream.h>
        #include <iomanip.h> //要用到格式控制符

        void main()
        {
          double amount = 22.0/7;
          cout <<amount <<endl;
          cout <<setprecision(0) <<amount <<endl
           <<setprecision(1) <<amount <<endl
           <<setprecision(2) <<amount <<endl
           <<setprecision(3) <<amount <<endl
           <<setprecision(4) <<amount <<endl;

          cout <<setiosflags(ios::fixed);
          cout <<setprecision(8) <<amount <<endl;

          cout <<setiosflags(ios::scientific)

    <<amount <<endl;

    cout <<setprecision(6); //重新设置成原默认设置
        }

       运行结果为:
         3.14286
         3
         3
         3.1
         3.14
         3.143
         3.14285714
         3.14285714e+00

      该程序在32位机器上运行通过。
      在用浮点表示的输出中,setprecision(n)表示有效位数。
      第1行输出数值之前没有设置有效位数,所以用流的有效位数默认设置值6:第2个输出设置了有效位数0,C++最小的有效位数为1,所以作为有效位数设置为1来看待:第3~6行输出按设置的有效位数输出。
      在用定点表示的输出中,setprecision(n)表示小数位数。
      第7行输出是与setiosflags(ios::fixed)合用。所以setprecision(8)设置的是小数点后面的位数,而非全部数字个数。
      在用指数形式输出时,setprecision(n)表示小数位数。
      第8行输出用setiosflags(ios::scientific)来表示指数表示的输出形式。其有效位数沿用上次的设置值8

wqzhishou
推荐于2016-03-05 · TA获得超过190个赞
知道小有建树答主
回答量:111
采纳率:0%
帮助的人:102万
展开全部
无法一次清除,只能逐类清除。
cout.unsetf(ios::adjustfield|ios::basefield|ios::floatfield) //清除所有与域相关,与基数相关,与浮点相关的设置。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
L_o_o_n_i_e
2011-12-02 · TA获得超过4.2万个赞
知道大有可为答主
回答量:8507
采纳率:38%
帮助的人:5229万
展开全部
恢复精度有点噜苏:
cout << resetiosflags( ios::fixed | ios::showpoint ) << setprecision (0) << a << endl;

所有的效果? c++ 的输出太繁杂,说不清楚,还是看帮助文件吧,用哪看哪,节省时间。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式