用户636281814
2016-12-10 07:33
采纳率: 100%
浏览 2.4k
已采纳

C语言浮点数“truncation from 'const double' to 'float'”?

 #include<stdio.h>
int main() 
{
            float a; float b; float c;
            a=4.2; b=3.1; c=1.1;
            if ((a-b)==c) {
                printf("相等 ");
            } else {
                printf("不相等 ");
            }
            printf("%f\n",a);
            printf("%f\n",b);
            printf("%f\n",a-b);
            printf("%f",c);
        }

为什么输出结果未“不相等”?

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • passer.by 2016-12-10 08:45
    已采纳

    C或C++ 里对float 和double进行比较时不能直接==比较,浮点数有精度查,大概是0.00001所以一般是这样

    C 语言内:

                a与零比较是否相等
                                typedef 0.000001  EPS;
                                if ( a > -EPS  && a < EPS )
                                        a == 0;
    
                a与b 比较是否相等
                   typedef 0.000001  EPS;
                                float tmp x = a-b;
    
                                if ( x > -EPS  && x < EPS )
                                        a == b;
    

    C++内
    const float EPS = 0,000001;

                    其它与C语言内一样当然也可以使用C语言方法,但C语言内不支持const
    
    double 一样
    

    ** 纯手打**

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • KoalaZB 2016-12-10 08:26

    c语言基础知识:两个浮点数不能直接比较是否相等。一般通过函数abs()求绝对值来进行比较。

    #include

    if(abs(a -b) == abs(c))
    {printf("相等\n");

    这样就可以了

    其中abs(a)函数 :当a>0时直接返回a 当a<0时返回-a

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题