如何在c中使用double来舍入舍入小数

时间:2015-09-07 20:50:07

标签: c

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

答案输出为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;
}

1 个答案:

答案 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);