昨天在做藍橋杯練習題的時候接觸了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;
}
就可以了。