回 帖 发 新 帖 刷新版面

主题:一个有关 double和float转换问题

在网上找到一篇有关类型转换的文章。http://it.kswchina.com/ncre/ej/xy/fd/599219.html
里面有这样一段:
    1 double d = 0.6;

  2 float f = (float)d;

  3 double d2 = f;

  4 bool b = d == d2;

  这里的b,也是false。
然后我就去编个小程序试看看,以下程序:
#include <iostream>
using namespace std;
int main()
{
    double d = 0.6;
    float f=(float)d;
    double d2=f;
    bool b = d == d2;    
            cout<<d2<<endl;
    cout<<f<<endl;
    cout<<b<<endl;
    return 0;
}
结果输出时0.6 
          0.6
           1
郁闷啊,为什么b是true的,和上面讲的不一样?求指点!


[img]http://hiphotos.baidu.com/as1138/abpic/item/bab1011332b1523b5baf5311.jpg[/img]

回复列表 (共7个回复)

沙发


我把你的代码copy运行了下,结果b是1。。。不知道你用的什么编译器

板凳


说错了 ,我运行的b是0[em3]

3 楼


我用的是VC6.0

4 楼

呵呵,换了下VS2008,b就为0了,看来VC6.0有点...

5 楼

vc6可能圆整数据了,要么就是没做精度检查

6 楼

#include <iostream>
using namespace std;
int main()
{
    double d = 0.6;
    float f=(float)d;
    double d2=f;
    [color=FF0000]bool b = d == d2; //我调试到这个地方时发现 d=0.59999999999999998  d2=0.60000002384185791[/color]  
            cout<<d2<<endl;
    cout<<f<<endl;
    cout<<b<<endl;
    return 0;
}

7 楼

浮点误差,所以浮点一般不判断相等

我来回复

您尚未登录,请登录后再回复。点此登录或注册