none
c++的I/O流的输出格式问题??? RRS feed

  • 问题

  • #include <iostream>
    #include <iomanip> 
    using namespace std; 
    int main()
    { 
    	float a=12345.0,b=1.2345;
    	cout<<a<<endl;//输出"12345" 
    	cout<<setiosflags(ios::fixed)<<setiosflags(ios::showpoint)<<setprecision(3)<<b<<endl;//输出"1.235" 
    	cout<<setiosflags(ios::scientific)<<a<<endl;//输出"1.234500e+004 " 
    	cout<<setprecision(3)<<a<<endl;//输出"1.235e+004 " 
    	return 0; 
    } 
    


    为什么输出为 :

    12345
    1.235
    0x1.81cp+13
    0x1.81cp+13
    请按任意键继续. . .

    我用的是vs2008,别人用2005就不输出错误,怎么回事?????

    2011年8月11日 5:19

答案

  • 你好,

     

    这个是问题并不是由于VS2008的配置问题所造成。您也可以尝试在VS2010上也会得到相同的结果。

     

    造成这个的原因是因为您同时对输出格式设置了两个截然相反的格式。iso::fixed 是操作符setiosflags 的参数之一,该参数指定的动作是以带小数点的形式表示浮点数,并且在允许的精度范围内尽可能的把数字移向小数点右侧。ios::scientific是表示指数表示的输出形式,其作用是尽可能的简化数字的表现形式。

     

    我将您的程序稍作了修改:

    #include <iostream>

    #include <iomanip>

    using namespace std;

    int main()

    {

                    float a=12345.0,b=1.2345;

                    cout<<a<<endl;//输出"12345"

                    cout<<fixed<<setprecision(3)<<b<<endl;//输出"1.235"

                    cout<<scientific<<a<<endl;//输出"1.234500e+004 "

                    cout<<setprecision(3)<<a<<endl;//输出"1.235e+004 "

                    return 0;

    }

     

     

    希望我的回答能够帮助您解决您的问题


    Rob Pan [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 Rob Pan 2011年8月17日 9:33
    2011年8月12日 7:22

全部回复

  • 应该是你的设置问题吧,VS2008没用过啊.
    2011年8月12日 0:38
  • 我同学安装的vs2008也是这个结果,不会都设置错了吧,是不是编译器支持不好啊,当把第二个cout屏蔽了,就显示正确结果,相互之间还有影响?
    2011年8月12日 2:02
  • 你好,

     

    这个是问题并不是由于VS2008的配置问题所造成。您也可以尝试在VS2010上也会得到相同的结果。

     

    造成这个的原因是因为您同时对输出格式设置了两个截然相反的格式。iso::fixed 是操作符setiosflags 的参数之一,该参数指定的动作是以带小数点的形式表示浮点数,并且在允许的精度范围内尽可能的把数字移向小数点右侧。ios::scientific是表示指数表示的输出形式,其作用是尽可能的简化数字的表现形式。

     

    我将您的程序稍作了修改:

    #include <iostream>

    #include <iomanip>

    using namespace std;

    int main()

    {

                    float a=12345.0,b=1.2345;

                    cout<<a<<endl;//输出"12345"

                    cout<<fixed<<setprecision(3)<<b<<endl;//输出"1.235"

                    cout<<scientific<<a<<endl;//输出"1.234500e+004 "

                    cout<<setprecision(3)<<a<<endl;//输出"1.235e+004 "

                    return 0;

    }

     

     

    希望我的回答能够帮助您解决您的问题


    Rob Pan [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 Rob Pan 2011年8月17日 9:33
    2011年8月12日 7:22