搜索
查看: 2572|回复: 7
打印 上一主题 下一主题

小数问题

[复制链接]
跳转到指定楼层
楼主
发表于 2013-3-21 16:53:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
5.2+3.1为什么等于8.299999????
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main()
{
        float a,b,c;
    a=5.2;
    b=3.1;
    c=a+b;

    printf("%f",c);


        Sleep (8000);
        return 0;

有错误吗?新手求助。。

最佳答案

查看完整内容

程序没有任何问题,问题出在二进制身上。计算机中是以二进制来存储数据的,十进制的浮点数转换为二进制后存在精度问题,所以输出结果就不正确了。 若将printf改成这样 printf("%.9f",c); 你会发现输出结果变成了8.299999237 这里可以用以下语句来得到“正确”结果: printf("%.1f",c); 以上的.9,.1是用来指定输出的小数位数。
沙发
发表于 2013-3-21 16:53:51 | 只看该作者
程序没有任何问题,问题出在二进制身上。计算机中是以二进制来存储数据的,十进制的浮点数转换为二进制后存在精度问题,所以输出结果就不正确了。
若将printf改成这样
printf("%.9f",c);
你会发现输出结果变成了8.299999237
这里可以用以下语句来得到“正确”结果:
printf("%.1f",c);
以上的.9,.1是用来指定输出的小数位数。
板凳
 楼主| 发表于 2013-3-21 16:57:02 | 只看该作者
OK  搞定了 知道什么问题了
地板
发表于 2013-3-21 17:57:12 | 只看该作者
最后还少个

}
5#
 楼主| 发表于 2013-3-22 08:46:35 | 只看该作者
Smallbee 发表于 2013-3-21 17:06
程序没有任何问题,问题出在二进制身上。计算机中是以二进制来存储数据的,十进制的浮点数转换为二进制后存 ...

恩呢 非常感谢 还在学习中 很有意思 希望多多帮助!
6#
 楼主| 发表于 2013-3-22 08:47:04 | 只看该作者
chipplei 发表于 2013-3-21 17:57
最后还少个

}

恩 那个由于粗心没有复制上  问题已经解决 谢谢
7#
发表于 2013-3-22 15:18:02 | 只看该作者
x嘘x别慌 发表于 2013-3-22 08:46
恩呢 非常感谢 还在学习中 很有意思 希望多多帮助!

我也只是学了个皮毛。互相学习,共同进步吧
8#
发表于 2013-3-22 17:02:10 | 只看该作者
格式控制输入输出,可以自己设置小数点位数(一定范围内),具体回复也有
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表