c语言这个题为什么输入110 100时错误啊???

这个题为什么输入110 100时错误啊???

 

求大佬解惑


#include<stdio.h>

int main ()
{
    int a,n;
    double x;
    scanf("%d %d",&a,&n);
    if(a<n*1.1)
    {

        printf("OK");
    }
    else if(a>=n*1.1 && a<=n*1.5)
    {
        x=100.0*(a-n)/n;
        printf("%.0lf%%,1",x);
    }
    else if(a>=n*1.5)
    {
        x=100.0*(a-n)/n;
        printf("%.0lf%%,2",x);
    }

    return 0;
}

精度问题。我打印出 n*1.1,你看它十几是110.00000000000001421085。解决办法是类型转换会整数,避免精度问题。你看一下修改后得代码和输出结果。

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

int main ()
{
    const double e = 1e-5;
    
    int a,n;
    double x;
    scanf("%d %d",&a,&n);
    
    x = 1.1 * n;
    printf("a=%d n=%d x=%4.20f\n", a, n, x);
    
    if(a < (int)(n * 1.1))
    {
        printf("OK");
    }
    else if(a >= (int)(n*1.1) && a <= (int)(n*1.5))
    {
        x=100.0*(a-n)/n;
        printf("%.0lf%%,1",x);
    }
    else if(a >= (int)(n*1.5))
    {
        x=100.0*(a-n)/n;
        printf("%.0lf%%,2",x);
    }

    return 0;
}

//Output
110 100                                                                                                                                                                            
a=110 n=100 x=110.00000000000001421085                                                                                                                                             
10%,1  

 

你说的错误是指什么啊?

希望对您有帮助:https://blog.csdn.net/it_xiangqiang/category_10581430.html
希望对您有帮助:https://blog.csdn.net/it_xiangqiang/category_10768339.html