我知道这个问题已经存在了一段时间,但是我似乎无法找到如何阻止我的程序舍入到小数点后三位。
答案输出为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/