c++输出精度控制
题目描述:
数列的第一项为n,以后各项为前一项的平方根,求数列的前m项的和。
输入描述:
输入数据有多组,每组占一行,由两个整数n(n < 10000)和m(m < 1000)组成,n和m的含义如前所述。
输出描述:
对于每组输入数据,输出该数列的和,每个测试实例占一行,要求精度保留2位小数。
这里涉及到一个输出精度的控制,我们知道在这C语言中,控制输出精度可以直接用以下代码。
printf("%.2lf\n",sum);
在C++中输出控制精度需要用到std::ios_base::precison,即std::cout.precison()。这个函数是用来控制输出的有效位,如下所示
double n = 0.001010; cout.precision(4); cout << n << endl;
这个的输出结果就是0.00101。从第一个1开始为第一个有效位,连续输出4个有效位,最后一位的0被省略。这并没有达到我们要设置小数点后位数的要求,所以在查阅了资料后发现结合std::fixed使用可以控制小数点后的位数,使用方法如下:
double n = 0.001010; cout.precision(4); cout << fixed << n << endl;
这个的输出结果就是0.0010。
需要注意的是 cout.precision(4); 后cout的精度一直都是4个有效位,若设置了fixed,就一直控制小数点后的位数。目前还没有消除precision的方法,只能重新设置成新的有效位,但是针对fixed可是通过cout.unsetf( ios::fixed );来消除。