设置浮点数的显示精度&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; }