почему я не получаю десятичную точность до 1 ди git? - PullRequest
1 голос
/ 18 марта 2020
float mean(int a[],int p){
    int sum=0;
    double ans;
    for(int i=0; i<p; ++i){
        sum=sum+a[i];
    }
    ans=sum/p;
    cout<<setprecision(1)<<ans<<endl;
}

ввод: 4897 54012 32015 4684 2122 44848 99999 54651 16161 76482 ожидаемый вывод: 38987,1 мой вывод: 38987.0

1 Ответ

1 голос
/ 18 марта 2020

При делении int на int вы получаете int. Когда вы устанавливаете точность своего ответа, вы устанавливаете точность числа, которое уже было усечено.

Например, когда у вас есть:

int a = 5;
int b = 2;
double ans = a / b; //(5/2 = 2)

//ans = 2.0

Вы работаете с целочисленным делением.

a / b

равно 5/2, что дает 2 из-за целочисленного деления не 2.5.

Даже если вы устанавливаете его равным double, вы все равно получаете 2.0, потому что вы устанавливаете ans для результата 5/2, то есть 2. Затем int 2 преобразуется в double: 2.0 , Чтобы получить ответ с правильной десятичной аппроксимацией, сделайте одно из чисел двойным (я бы предложил изменить int p на double p).

...