Нежелательное округление в делении - PullRequest
1 голос
/ 19 февраля 2020

У меня есть массив из 20 чисел; Я хочу найти среднее арифметическое c всех отрицательных чисел в массиве, а затем вычесть это число из каждого элемента этого массива. Проблема в том, что когда я пытаюсь разделить сумму значений отрицательных чисел на количество отрицательных чисел (чтобы найти среднее значение), она автоматически округляется до ближайшего целого числа

Вот код:

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 ]

1 голос
/ 19 февраля 2020

Вы вносите изменения в 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
        }
    }
0 голосов
/ 19 февраля 2020

Я просто запустил код локально, и он выплевывает -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 массивом чисел с плавающей точкой, а не целых.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...