不知道怎么回事出的问题 求大神,一个把2进制转换为十进制的程序 小数部分有问题

#include
int main()
{
double a,b,e=0,d=1;
int c,f=0,g;
scanf("%lf",&a);
c=int(a);
b=a-c;

while(c!=0)
{
    if(c%2==1)
        e=e+d;
    d=d*2;
    c=c/10;
}
d=1;
while(b!=0&&f!=8)

{

    b=b*10;
    printf("%f    ",b);

    if(int(b)==1)
    {
        e=e+d;
        b=b-1;
        }
    d=d/2;
    f++;


}
printf("%lf",e);

}

如果输入111.101的话出来的是7.5 其他的都正常 怎么回事,为什么有的时候int(b)==1判断不了?

因为浮点数大部分都无法精确存储。
比如0.9可能在内存中存储的是0.8999999,你用int强转的时候可能会丢失精度
printf("%f ",b);改成 printf("%.16f ",b);建议多打印几位就清楚了
楼主这里之所以等于7.5是因为,1+2+4+0.5,本来应该还有个0.125,但是由于精度问题,打印出的b虽然是1,但实际存储的是0.99999999
所以int(b)就变成0图片说明

http://blog.csdn.net/thisispan/article/details/7458795