我知道这个问题已经存在了一段时间,但是我似乎无法找到如何阻止我的程序舍入到小数点后三位。

答案输出为4524.370,应为4524.369

另外,我知道我的方程式很愚蠢,可以简化但很懒

//Tanner Oelke CSE155E

 #include<stdio.h>
 #include<stdlib.h>
 #include<math.h>

 int main(void){

    double v, t; //base variables
    double sq1, sq2; //calculation variable for square root

    printf("Please enter the given air temperature in Fahrenheit:");
    scanf("%lf", &t);

    //unessecary equations but it works
    sq1=(57*t+297);
    sq2=(sq1/247);
    v=1086*sqrt(sq2);

    printf("%.3lf\n", v);

    return 0;
}

最佳答案

输入“ 70.0”,结果为4524.369754 ...,显示为“ 4524.370”-OP得到什么。

输入“ 69.999975”,结果为4524.369002 ...,显示为“ 4524.369”,这是OP的要求。

如果OP期望“ 70.0”产生“ 4524.369”,则需要对该公式进行一些细微调整。 double的精度至少为10个有效数字,通常为15+。即使在float然后在f(70.0)--> 4524.370中执行此操作。

其他OP的期望错误。



对OP的comment的响应:

“将小数位缩短至3位而不舍入”。嗯,想要这个似乎很奇怪:

// properly rounded result
printf("%.3lf\n", v);
// shorten to 3 places without rounding
double v3 = floor(v*1000.0)/1000.0;
printf("%.3lf\n", v3);

关于c - 如何在C中用double停止四舍五入小数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32445882/

10-15 14:27