精確到小數點后n位的兩種方法


引言:大家在寫程序中多多少少會遇到這個問題,特別對一些初學者會出現這個問題,做個ACM競賽的同學肯定都會用C語言的printf格式控制輸出,但是習慣於用C++的同學也不是一點辦法都沒有啊,這篇blog中會介紹C++中如何使用,雖然稍微復雜一定,但是也不失為一種方法。

首先看一下代碼(以求四個整數的和與平均值為例):

//求四個整數的和與平均值 
#include<iostream>
#include<iomanip> 
using namespace std;
int main()
{
	int a,b,c,d,e;
	double f;
	cin>>a>>b>>c>>d;
	e=a+b+c+d;//e存放和 ,為整數 
	f=(double)e/4;//f存放平均值 ,為double 
	printf("%d %.1f\n",e,f);	//C語言控制格式輸出,小數點后面保留一位小數 
	//C++輸出流格式控制輸出 
	cout<<e<<" "<<setiosflags(ios::fixed)<<setiosflags(ios::right)<<setprecision(1)<<f;
	return 0;
}

  可以看到C語言的printf是很容易控制格式的,"%m.nf":輸出浮點數,m為寬度,n為小數點右邊數位

  同時注意到C++的cout輸出流中使用到了兩個函數setiosflags()和setprecision()

  下面介紹一下這兩個函數:

     setiosflags()函數:setiosflags 是包含在命名空間iomanip 中的C++ 操作符,該操作符的作用是執行由有參數指定區域內的動作;

        iso::fixed 是操作符setiosflags 的參數之一,表示以定點的方式輸出實數;

        iso::right 也是setiosflags 的參數,該參數的指定作用是在指定區域內右對齊輸出;

     setprecision()函數:setprecision(n)可控制輸出流顯示浮點數的數字個數為n。C++默認的流輸出數值有效位是6

   cout<<setiosflags(ios::fixed)<<setiosflags(ios::right)<<setprecision(1);

   合在一起的意思就是:輸出一個右對齊的小數點后1位的浮點數,即作用是:控制小數點右邊的位數。

 

參考資料:

  setprecision()與setiosflags()(c++小數點后面精確到n位)

  Printf()輸出格式控制 setprecision()與setiosflags()(c++小數點后面精確到n位)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM