在除法中不需要四舍五入
Unwanted Rounding in Division
我有一个 20 个数字长的数组;我想找到数组中所有负数的算术平均值,然后从该数组的每个元素中扣除该数字。 问题是当我尝试将负数的值之和除以负数的数量(以找到平均值)时,它会自动向下舍入到最接近的整数
代码如下:
int main()
{
double a1 = 0.0;
double b2 = 0.0; // arth mean
int arr[20] = {12, -30, 23, -43, 51, 26, 0, 88, 19, -10, 11, 2, 23, -14, 15, 6, -7, 1, -19, 120};
for(int i = 0; i < 20; i++) {
if(arr[i] < 0) {
a1 += arr[i]; // sum of negative numbers
}
}
b2 = a1 / 6;
cout << b2;
for(int i = 0; i < 20; i++) {
arr[i] = arr[i] - b2;
}
for(int i = 0; i < 20; i++) {
cout << arr[i] << " ";
}
return 0;
}
您正在更改arr
,这是一个类型为int
的数组,因此每个浮动数据类型将自动更改为忽略小数点,剩余的数字int
即int 5 = 5.9;
将等于5
这是最后一行的答案。因此,将数组arr
转换为浮点或双精度数据类型。
float arr[20] = {12, -30, 23, -43, 51, 26, 0, 88, 19, -10, 11, 2, 23, -14, 15, 6, -7, 1, -19, 120};
for(int i = 0; i < 20; i++) {
if(arr[i] < 0) {
a1 += arr[i]; // sum of negative numbers
}
}
我只是在本地运行代码,它确实吐出了 -20.5。完整的输出是这样的:
-20.532 -9 43 -22 71 46 20 108 39 10 31 22 43 6 35 26 13 21 1 140
也许您的困惑是您没有在第一个数字后添加空格?尝试
cout << b2 << " ";
相反,也许它会更清楚。另请注意,执行此操作时:
arr[i] = arr[i] - b2;
RHS 是一个浮点数,存储在arr[i]
中时会被截断。为避免这种情况,请arr
浮点数数组而不是整数数组。
相关文章:
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- 为什么output_editor Concept不需要output_e迭代器标记
- 在除法中不需要四舍五入
- 与C代码相比,为什么C++代码不需要"#define _POSIX_C_SOURCE 200809L"?
- 将值从另一个数组写入数组,不包括不需要的值 C++
- C++ 写入路径名中包含不需要的空字符的文件
- 是否有必要获取锁并在不需要唤醒线程时通知condition_variable?
- 使用 assimp 加载模型 - 不需要提升?
- 为什么转换函数声明不需要至少一个定义类型说明符
- 返回不需要的值的二叉搜索程序
- 当我不需要数据库中的所有值时,如何部分初始化 c++ 对象?
- C++:用户输入会产生不需要的行为
- 如何在不需要LIBCD.lib的情况下在Visual Studio 6中编译C项目
- 为什么python需要全局关键字而C/C++不需要?
- 将一个宏传递到另一个宏而不是直接传递内容时会出现不需要的额外"空"参数
- 为什么我们需要在 C++ 中检查空指针,而在 Java 中不需要?
- 为什么复制构造函数不需要检查输入对象是否指向自身?
- 为什么不需要在 C++20 中的依赖类型之前指定"typename"?
- C++不重载时间函数,所以我们不需要写 NULL 有什么原因吗?