不需要的舍入四舍五入

时间:2020-02-19 13:20:43

标签: c++ math

我有一个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;
}

2 个答案:

答案 0 :(得分:1)

您正在arr中进行更改,int是类型为int的数组,因此每种浮动数据类型都将自动更改为忽略小数点,其余数字为int 5 = 5.9;,即{{1 }}等于5,这是最后一行的答案。因此,将数组arr转换为float或double数据类型。

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

答案 1 :(得分:-1)

我只是在本地运行代码,它确实吐出-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设置为浮点数而不是整数。