qq873950124
2016-10-27 15:40
采纳率: 60.4%
浏览 1.0k
已采纳

不知道怎么回事出的问题 求大神,一个把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判断不了?

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • 小灸舞 2016-10-28 02:34
    已采纳

    因为浮点数大部分都无法精确存储。
    比如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图片说明

    打赏 评论
  • devmiao 2016-10-27 15:43
    打赏 评论

相关推荐 更多相似问题