昨天在做蓝桥杯练习题的时候接触了setiosflags(ios::fixed)和setprecision(n),用来设定小数位数,先把题目打出来吧:
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main()
{
int r,area_0,digit=0;
double area,PI=atan(1.0)*4;
cin>>r;
area=PI*r*r; //计算面积
area_0=int(area); //取出整数位
//cout<<area<<endl<<area_0<<endl;
while (area_0>0) //计算整数位数
{
digit++;
area_0/=10;
}
//cout<<digit<<endl;
cout<<setprecision(7+digit)<<area<<endl;
return 0;
}
第一遍代码我是这么写的,可是发现在输入80的时候,结果会变成一个小数位是6的数,后来发现原来是在输出是他把小数末尾的无效的0舍去了。
使用setprecision(n)可控制输出流显示浮点数的数字个数。C++默认的流输出数值有效位是6。
如果setprecision(n)与setiosflags(ios::fixed)合用,可以控制小数点右边的数字个数。setiosflags(ios::fixed)是用定点方式表示实数。
所以更改一下
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main()
{
int r,area_0,digit=0;
double area,PI=atan(1.0)*4;
cin>>r;
area=PI*r*r;
cout<<setiosflags(ios::fixed)<<setprecision(7)<<area<<endl;
return 0;
}
就可以了。