在除法中不需要四舍五入

Unwanted Rounding in Division

本文关键字:四舍五入 不需要 除法      更新时间:2023-10-16

我有一个 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的数组,因此每个浮动数据类型将自动更改为忽略小数点,剩余的数字intint 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浮点数数组而不是整数数组。