为什么我不能打印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>
:中可用
- 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;
}
如果想要设置输出格式,可以使用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++ 中将字符串转换为字符 ----错误 "const char *" 类型的值不能用于初始化 "char" 类型的实体
- 用户定义的转换不能在C++中使用static_cast
- std::仅移动类型列表:不能在 VC++ 中放入 std::vector
- 类型值不能用于初始化类型实体
- pybind11:Python 到 C++ 数据类型转换不起作用
- 为什么模板<类型名...>不能通过模板<模板类型名>识别为可实例化<typename>?
- 为什么基类型指针不能获取派生类对象的地址值?
- 如果我除以 1,隐式类型转换不会发生
- 已弃用从字符串常量到“char*”的转换:不能使用该常量
- 在 C++ 中使用构造函数进行类型转换不起作用?
- 为什么这个函数重载与参数类型转换不明确
- 隐式类型转换不起作用
- C样式强制转换可以处理的转换,但C++强制转换不能
- 为什么模板类型参数不能隐式强制转换?
- C/ c++类型转换不同于函数和表达式
- Tm t1具有不完全类型,不能定义
- 从char*到wchar*的转换不能正常工作
- 为什么类型推导不能按预期工作
- 类构造函数中的类型转换不正确