关于if的问题

「已注销」 2018-01-26 12:32:46
#include<stdio.h>
int main(){
double a,b,c,x;
scanf("%lf %lf",&a,&b);
printf("%.0f %.0f",a,(a-b)/b*100);
if(a<b*1.1){//当我输入110 100时会进入这里,为什么,哪位大神帮我看下
printf("OK");
}

else if(a>=b*1.1&&a<b*1.5){
printf("Exceed %.0f%%. Ticket 200",(a-b)/b*100);
}
else if(a>=b*1.5){
printf("Exceed %.0f%%. License Revoked",(a-b)/b*100);
}
}
...全文
956 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
AlbertS 2018-01-29
  • 打赏
  • 举报
回复
浮点数是有精度的,你的理解是110 < 100 * 1.1是不成立的 但是100*1.1的结果可能是110.00000001,在满足精度的情况下,他是合理的,所以可能会输出OK
leetow2006 2018-01-28
  • 打赏
  • 举报
回复
是,可能是精度问题
觉皇嵌入式 2018-01-27
  • 打赏
  • 举报
回复
运算符优先级你看一下
自信男孩 2018-01-26
  • 打赏
  • 举报
回复
这是有可能的。因为a,b都是浮点数,浮点数是有精度的,普通输出%lf都是小数点保留6位,可以通过%.20lf或者更多,就可以找到为什么会a < b * 1.1为真了。
#include<stdio.h>

int main()
{
    double a,b,c,x;
    scanf("%lf %lf",&a, &b);
    printf("%.0lf %.0lf\n",a,(a-b)/b*100);

    printf("%.20lf %.20lf\n", a, b);
    printf("%.20lf \n", b * 1.1);
    if(a < b * 1.1) {
        printf("OK\n");
    }
    else if(a>=b*1.1&&a<b*1.5){
        printf("Exceed %.0lf%%. Ticket 200\n",(a-b)/b*100);
    }
    else if(a>=b*1.5){
        printf("Exceed %.0lf%%. License Revoked\n",(a-b)/b*100);
    }

    return 0;
}
对于浮点数判断大小不能按照整数判断大小的方法了,建议使用如下方法: 如果fabs(a-b)<=1e-6,那么就是相等了。 fabs是求浮点数绝对值的函数。 类似的 判断大于的时候,就是if(a>b && fabs(a-b)>1e-6)。 判断小于的时候,就是if(a<b&&fabs(a-b)>1e-6)。

69,375

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧