setprecision(n)是流格式控制符之一,在iomanip頭文件中。
c++默認的流輸出數值有效位是6,包括整數和小數,若數值超出6位,則第七位四捨五入到6位數
fixed :浮點值顯示爲定點十進制。 默認是小數6位數,不包含整數,若小數位超出6位,則四捨五入到6位數
1.setprecision(n) 指定一個浮點數的精度默認設置輸出的數字的總位數爲n,包含整數和小數部分;其中setprecision(0)效果是跟c++默認的流輸出數值一樣,有效位是6位,包括整數和小數
2.fixed :必須與setprecision(n)配合使用,用來控制小數位數,不夠補0,只要寫一次fixed,後面的setprecision(n)就都是指小數了。 fixed與setprecision誰先誰後沒有關係,但通常是fixed在前先固定6位小數(若此時小數已經超出6位,則先四捨五入到6位)再precision(n)取n位小數(n<6)
3.如果與setiosnags(ios::scientific)合用, 可以控制指數表示法的小數位數。setiosflags(ios::scientific)是用指數方式表示實數。
4.resetiosflags(ios::fixed) 取消精度的設置。
1.)超出的位數會被四捨五入進去!!!
2)與setw()不同setprecision(n)一直作用到下一個setprecisin(n)之前,所以,只需要寫一個setprecision(n)就可以。setw()要每次都寫
包含小數:
#include <iostream>
#include <iomanip>
using namespace std;
{
double f = 3.123456789;
cout<<f<<endl; // 輸出3.12346 (包含整數和小數,且四捨五入)
cout<<setprecision(2)<<f<<endl; //輸出3.1(包含整數和小數,共兩位,且最後一位四捨五入),這條會作用到下一條去
cout<<fixed<<f<<endl; //輸出3.123457 (僅包含小數,且四捨五入),沒有上一條,則輸出六位小數3.123457
cout<<setprecision(2)<<fixed<<f<<endl; //輸出3.12 (小數2位,四捨五入)
cout<<fixed<<setprecision(2)<<f<<endl; // 效果同上
system("pause");
return 0;
}
包含整數:
#include <iomanip>
#include<iostream>
using namespace std;
int main()
{
double f = 123456789;
cout<<f<<endl; // 輸出1.23457*(10,6)(採用科學記數法變成包含整數和小數,共6位,且最後一位四捨五入)
cout<<setprecision(2)<<f<<endl; //輸出120000000 1.2*pow(10,6)採用科學記數法,包含整數和小數,共兩位,且最後一位四捨五入)<
cout<<fixed<<f<<endl; //輸出12345689.000000(小數6位補0)
cout<<setprecision(2)<<fixed<<f<<endl; //輸出12345689.00
cout<<fixed<<setprecision(2)<<f<<endl; // 效果同上
system("pause");
return 0;
}