尽管进行了类型转换,但为什么我无法打印 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;
}
它是否打印 32
或 32.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
您想要输出格式,方法是使用 setprecision
的 iomanip
函数,如下所示:
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;
}
这是我的代码。输入是
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;
}
它是否打印 32
或 32.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
您想要输出格式,方法是使用 setprecision
的 iomanip
函数,如下所示:
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;
}