0
#include<fstream.h>
#include<iomanip.h>
#include<iostream.h>
using namespace std;
ifstream f("atestat.in");
ofstream g("atestat.out");
int n,i,nr=0;
float v[100];
void a(int n)
{
    for(i=1;i<=n;i++)
        f>>v[i];
    for(i=1;i<=n;i++)
    cout<<v[i]<<" ";
}
int main()
{
    f>>n;
    a(n);
    cout<<endl;
    float s=0;
    for(i=1;i<=n;i++)
    {
        if(v[i]<0)
        {   
        s=s+v[i];
        nr++;
        }
    }
    cout<<setw(2)<<s/nr<<endl;
}

私の「atestat.in」ファイルには次のものが含まれています:6 -56.765 2.3 4.56 -1.2 -1.8 3

このプログラムは、最初に配列を使用して「atestat.in」ファイルの 2 行目にすべての数値を表示し、次に、その配列内のすべての負の数値の算術平均を次の精度で表示することになっています。小数点以下 2 つの数字。何らかの理由で、「19.92」ではなく「19.9217」と表示されるため、 setw(2) はまったく何もしませんcout<<setw(2)<<s/nr<<endl;...誰か教えてください。どういうわけか私はそれを不適切に使用していますか?

4

1 に答える 1

2

小数点以下 2 桁の精度を持つ

このためには、次のものが必要です。

std::cout << std::fixed;
std::cout << std::setprecision(2) << f << '\n'; //assume f the number you wanna print

std::setwはこの目的には役立ちません:

式 out << setw(n) または in >> setw(n) で使用すると、ストリーム out または in の幅パラメーターを正確に n に設定します。

于 2013-05-18T22:17:44.207 に答える