为什么我不能打印32.0而不是32尽管类型转换

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

本文关键字:类型转换 不能 打印 为什么      更新时间:2024-03-28

这是我的代码。输入是

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>:中可用

  • std::setprecision
  • std::setfixed

示例:

#include <iomanip>
#include <iostream>
int main()
{
std::cout
<< 32.0 << 'n'
<< std::fixed << std::setprecision(1) << 32.0 << 'n';
}

输出:

32
32.0

coliru上的实时演示

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

如果您希望看到它们,您必须使用std::cout << std::fixed;。请参阅此处的详细信息。

此外,如果要设置浮点的精度,请使用std::cout.precision(N)
查看此处了解详细信息。

我会更改你的代码如下。

#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;
}

如果想要设置输出格式,可以使用setprecisioniomanip函数,如下所示:

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