我知道这个问题已经在互联网上存在了一段时间,但我似乎无法找到如何阻止我的程序舍入小数点后三位。
答案输出为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;
}
答案 0 :(得分:1)
输入&#34; 70.0&#34;结果是4524.369754 ...显示为&#34; 4524.370&#34; - 什么OP得到。
输入&#34; 69.999975&#34;结果是4524.369002 ...显示为&#34; 4524.369&#34; - OP想要什么。
如果OP预期&#34; 70.0&#34;导致&#34; 4524.369&#34;,然后需要对公式进行一些微调。 double
的精度至少为10位有效数字,通常为15+。甚至在float
然后f(70.0)--> 4524.370
执行此操作。
其他OP也有错误的期望。
对OP comment的回复:
&#34;将小数位缩短为3个点而不进行舍入&#34;。嗯,想要这个似乎很奇怪:
// 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);