Math 为什么我的十进制精度不能达到1位? 浮点平均值(int a[],int p){ 整数和=0; 双ans; 对于(int i=0;i

Math 为什么我的十进制精度不能达到1位? 浮点平均值(int a[],int p){ 整数和=0; 双ans; 对于(int i=0;i,math,c++14,Math,C++14,当一个int除以一个int时,你得到一个int。当你设置答案的精度时,你设置的是一个已经被截断的数字的精度 例如,当您有: 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;

当一个int除以一个int时,你得到一个int。当你设置答案的精度时,你设置的是一个已经被截断的数字的精度

例如,当您有:

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;
}
您正在使用整数除法

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

//ans = 2.0
是5/2,由于整数除法,它产生2,而不是2.5


即使将其设置为double,您仍然会得到2.0,因为您将ans设置为5/2的结果,即2。然后int 2将转换为double:2.0。要获得具有正确十进制近似值的答案,请将其中一个int设置为double(我建议将int p更改为double p).

ans=sum/p;
将进行int/int除法,然后将结果转换为double。使用
ans=(double)sum/p;
首先将sum的值转换为double,然后进行除法。
a / b