C++中“控制浮点数值显示”涉及的控制符setprecision()、fixed、scientific的相关用法

C++中“控制浮点数值显示”涉及的控制符setprecision()、fixed、scientific的相关用法

  1. setprecision():
    setprecision是一个计算机函数/控制符,使用setprecision(n)功能是控制输出流显示浮点数的有效数字个数。其中n为需要输出的浮点数值的位数。C++默认的流输出数值有效位数是6
    该控制符是在头文件iomanip中定义的对象。 使用控制符时可将其直接插入流中。

    示例1:

#include
#include
using namespace std;
int main(){
	cout<<setprecision(4)<<12.345<<endl;
	cout<<setprecision(4)<<12345.12<<endl;
	/*运行结果为
	12.35
	1.235e+004
	*/
}

分析:

cout<<setprecision(4)<<12.345<<endl;
  • 该行代码的运行结果最后一位会自动发生四舍五入转换。
cout<<setprecision(4)<<12345.12<<endl;
  • 该行代码的运行结果用科学表示法来表示。 由此可见,如果一个数字太大,无法使用 setprecision
    指定的有效数位数来打印
    ,则许多系统会以科学表示法的方式打印输出。为了防止出现这种情况,可以使用另一个流操作符fixed,它表示浮点输出应该以固定点或小数点表示法显示
  1. fixed
    表示浮点输出应该以固定点或小数点表示法,即,设置定点小数表示法

    示例2:

#include
#include
using namespace std;
int main(){
	cout<<123456789.12<<endl;
	cout<<123.4567<<endl;
	cout<<123.4567890<<endl;
	cout<<fixed<<123456789.12<<endl;
	cout<<123.4567<<endl;
	cout<<123.4567890<<endl;
	/*运行结果
	1.23457e+008
	123.457
	123.457
	123456789.120000
	123.456700
	123.456789
	*/
}

分析:

cout<<123456789.12<<endl;//1.23457e+008
cout<<fixed<<123456789.12<<endl;//123456789.120000
  • 可见,流操作符fixed可以防止出现打印输出的时候以科学表示法来表示
  • 但是,观察发现,最后两行代码并没有应用fixed,但是还是可以出现和应用fixed时候的效果,说明:倒数第三行代码中的fixed的效力保留到后面的流中。

注意:
fixed和setprecision只要使用之后,就会一直起作用,即其效力会一直保留

3、如果fixed和setprecision(n)合用,可以控制小数点右边的数字个数

示例3:

#include
#include
using namespace std;
int main(){
	cout<<fixed<<setprecision(3)<<123.45678<<endl;
	cout<<123.45678<<endl;//fixed和setprecision的效力会保留
	cout<<123.45<<endl;
	cout<<123.4<<endl;
	/*运行结果:
	123.457
	123.457
	123.450
	123.400
	*/
}

4、**如果scientific和setprecision(n)合用,可以控制指数表示法的小数位数。**scientific是设置指数方式的小数表示法。

示例4:

#include
#include  //要用到格式控制符
using namespace std;
int main(){
  double amount = 22.0/7;
  cout<<amount<<endl;
  cout<<setprecision(0)<<amount<<endl
      <<setprecision(1)<<amount<<endl
      <<setprecision(2)<<amount<<endl
      <<setprecision(3)<<amount<<endl
      <<setprecision(4)<<amount<<endl;

  cout<<fixed<<setprecision(8)<<amount<<endl;
  cout<<scientific<<amount<<endl;
  cout<<setprecision(6);    //重新设置成原默认设置
}
/*运行结果:
3.14286
3
3
3.1
3.14
3.143
3.14285714
3.14285714e+000
*/

分析:

  • 第1行输出数值之前没有设置有效位数,所以用流的有效位数默认设置值6。第2行输出设置了有效位数0,C++最小的有效位数为1,所以作为有效位数设置为1来看待。第 3~6 行输出按设置的有效位数输出。
  • 第7行输出是与 fixed合用,所以setprecision(8)设置的是小数点后面的位数,而非全部数字个数。
  • 第 8行输出用 scientific 来表示指数表示的输出形式。其有效位数沿用上次的设置值8。

总结:
1、在普通表示的输出中,setprecision(n)表示有效位数。
2、在确定表示的输出中,即和fixed连用的时候,setprecision(n)表示小数位数。
3、在指数形式输出时,即和scientific连用的时候,setprecision(n)表示小数位数。
4、小数位数截断显示时,进行四舍五入处理。
5、注意操作符的效力。

有错欢迎指正。Danke!!

你可能感兴趣的:(笔记,控制浮点数值的显示,c++,编程语言)