普通网友 2016-10-27 15:40 采纳率: 0%
浏览 1015
已采纳

不知道怎么回事出的问题 求大神,一个把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图片说明

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?