尽管进行了类型转换,但为什么我无法打印 32.0 而不是 32?

Why am I not able to print 32.0 instead of 32 inspite of typeconversion?

这是我的代码。输入是

5

10 40 30 50 20

1 2 3 4 5

我试图找到大小为 n 的数组的加权平均值,向量 a 包含向量 b 中的 n 个元素及其相应的权重。我无法理解为什么打印出 32 而不是 32.0?谁能告诉我为什么以及如何更改它?

int main() {
    int n;
    cin>>n;
    vector<int> a(n),b(n);
    for(int i=0;i<n;i++){
        cin>> a[i] ;
    }
    for(int i=0;i<n;i++){
        cin>> b[i] ;
    }
    double s=0,w=0;
    for(int i=0;i<n;i++){
        s+=b[i]*a[i];
        w+=b[i];
    }
    cout<<s/w*1.0;

    return 0;
}

它是否打印 3232.0 是输出格式的主题。默认情况下,如果可能,它会删除所有不必要的数字(以及小数点)。 (*1.0 对此没有帮助。)

相关函数在<iomanip>:

示例:

#include <iomanip>
#include <iostream>

int main()
{
  std::cout
    << 32.0 << '\n'
    << std::fixed << std::setprecision(1) << 32.0 << '\n';
}

输出:

32
32.0

Live Demo on coliru

您想要输出格式,方法是使用 setprecisioniomanip 函数,如下所示:

    std::cout << std::fixed; 
    std::cout << std::setprecision(1); //setprecision(n) where n = number of decimal digits
    std::cout <<s/w << '\n';\

c++ cout 默认情况下自动删除尾随零。

如果你想看到它们,你必须使用 std::cout << std::fixed; 查看 here 的详细信息。

此外,如果您想设置浮点数的精度,请使用std::cout.precision(N)
检查 here 了解详细信息。

我会按如下方式更改您的代码。

#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n;
    cin>>n;
    vector<int> a(n),b(n);
    for(int i=0;i<n;i++){
        cin>> a[i] ;
    }
    for(int i=0;i<n;i++){
        cin>> b[i] ;
    }
    double s=0,w=0;
    for(int i=0;i<n;i++){
        s+=b[i]*a[i];
        w+=b[i];
    }
    // MODIFIED
    cout << fixed;
    cout.precision(1);
    // MODIFIED END
    cout<<s/w*1.0;

    return 0;
}