zoukankan      html  css  js  c++  java
  • 设置浮点数的显示精度&precision(0)

    /*
        设置浮点数的显示精度
        cout.precision(int)可以设置浮点数的显示精度(不包括小数点)
       
        注:

            1.如果设置的精度大于浮点数的位数,如果浮点数能根据IEEE754精确表示,则补零;如果浮点数不能精确表示,则尽量接近
            2.如果设置的精度小于浮点数的位数,采用科学计数法表示
            3.precision(int)单独使用,表示设置有效位数;与fixed或者scientific连用,表示设置小数位的精度
            4.precision(int)会一直生效
            5.float浮点数默认有效位数为6位,不包括小数点,即默认设置有setprecision(6),此默认设置还包含双精度浮点数
            6.precision(0)的问题:
            在VS中,
            如果precision(0)直接使用,则等同于设置默认有效位数,即precision(6);
            如果与fixed连用,则都表示设置小数点后的精度为0,即没有小数位;
            如果与scientific连用,则等同于设置默认有效位数,即precision(6),即表示设置小数点后的精度为6
            综上,在VS中设置精度为0时,存在默认精度6和设置精度0的显隐性问题,只有当与fixec连用,设置精度0才会显示出来;其他情况下,
        显示的都是默认精度6
            
            在dev中设置精度0时,存在设置精度1和设置精度0的显隐性问题,当与fixed或者scientific连用,设置精度0显性;其他情况下,设置
        精度1显性
    */

    //基本例子
    #include <iostream>
    using namespace std;
    int main()
    {
        float p1=3.1415926f;
        float p2=1234.56789f;
        cout<<p1<<endl;         //3.14159
        cout<<p2<<endl;         //1234.57
        cout.precision(13);
        cout<<p1<<endl;         //3.141592502594
        cout<<p2<<endl;         //1234.567871094
        cout.precision(3);
        cout<<p1<<endl;         //3.14
        cout<<p2<<endl;         //1.23e+003
    
        return 0;
    }
    //VS中precision(0)的情形,存在precision(0)与precision(6)的显隐性问题。只有当与fixed连用时,precision(0)才为显性 
    #include <iostream>
    #include <iomanip>
    using namespace std;
    int main()
    {
        float y=3.460f;
        cout.precision(0);
        cout<<y<<endl;                                        //3.46,precision(6)显性
        cout<<scientific<<y<<endl;                            //3.460000e+000,precision(6)显性
        cout<<resetiosflags(ios::floatfield)<<y<<endl;        //3.46,precision(6)显性
        cout<<fixed<<y<<endl;                                 //3,precision(0)显性
        cout<<resetiosflags(ios::floatfield)<<y<<endl;        //3.46,precision(6)显性
    
        cout<<endl;
        float z=0.3460f;
        cout.precision(0);
        cout<<z<<endl;                                        //0.346,precision(6)显性
        cout<<scientific<<z<<endl;                            //3.460000e-001,precision(6)显性
        cout<<resetiosflags(ios::floatfield)<<z<<endl;        //0.346,precision(6)显性
        cout<<fixed<<z<<endl;                                 //0,precision(0)显性
        cout<<resetiosflags(ios::floatfield)<<z<<endl;        //0.346,precision(6)显性
    
        system("pause");
        return 0;
    }
    //precision(0)在dev中的情形,存在precision(0)与precision(1)的显隐性问题。当与fixed或scientific连用时,precision(0)为显性 
    #include <iostream>
    #include <iomanip>
    using namespace std;
    int main()
    {
        float y=3.460f;
        cout.precision(0);
        cout<<"y:"<<y<<endl;                                     //3,precision(1)显性,即有效位数为1 
        cout<<"y:"<<scientific<<y<<endl;                         //3e+000,precision(0)显性,即小数点后的位数为0 
        cout<<"y:"<<resetiosflags(ios::floatfield)<<y<<endl;     //3,precision(1)显性,即有效位数为1 
        cout<<"y:"<<fixed<<y<<endl;                              //3,precision(0)显性,即小数点后的位数为0 
        cout<<"y:"<<resetiosflags(ios::floatfield)<<y<<endl;     //3,precision(1)显性,即有效位数为1 
        
        cout<<endl;
        float z=0.3460f;
        cout.precision(0);
        cout<<z<<endl;                                            //0.3,precision(1)显性,即有效位数为1 
        cout<<scientific<<z<<endl;                                //3e-001,precision(0)显性,即小数点后的位数为0  
        cout<<resetiosflags(ios::floatfield)<<z<<endl;            //0.3,precision(1)显性,即有效位数为1 
        cout<<fixed<<z<<endl;                                     //0,precision(0)显性,即小数点后的位数为0 
        cout<<resetiosflags(ios::floatfield)<<z<<endl;            //0.3,precision(1)显性,即有效位数为1 
        return 0; 
    }
  • 相关阅读:
    ASP.NET上传文件的三种基本方法
    实例分析 equals 和 ==
    如何保证Web Service的安全
    Winform动态显示图片,数据流方式
    C# 文件保存到数据库中或者从数据库中读取文件
    简说Session
    NotifyIcon的简单使用
    c# Invoke和BeginInvoke 区别
    DataGridView 的 CurrentCellDirtyStateChanged事件用法
    十种发送邮件的方式
  • 原文地址:https://www.cnblogs.com/kevinq/p/4492018.html
Copyright © 2011-2022 走看看