搜索
查看: 3649|回复: 6
打印 上一主题 下一主题

为什么结果会是这样?

[复制链接]
跳转到指定楼层
楼主
发表于 2013-4-24 13:35:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
#include <stdio.h>
#include <stdlib.h>
int main()
{
    float a,b,c;
    a=45.65;
    b=87.63;
    c=a+b;   
    printf("%f\n",c);
    system("pause");
return 0;
}
就一个加法运行以后

不应该是133.28么,为什么结果是133.279999?
顺便问一下为什么一按截图啊哈c界面就不见了?
顺便新人报道。

最佳答案

查看完整内容

因为c语言的标准,如果你在程序中直接写小数,它会默认为double型,并以科学计数法存储数据。 当你将double型数据改为float型时,编译器自动使用缩约过程,所以会出现其上情况。 修改办法,改用double型,或者将输出改成printf("%.2f\n",c);当它以两位小数输出自动四舍五入。
沙发
发表于 2013-4-24 13:35:24 | 只看该作者
本帖最后由 Teddy 于 2013-4-27 11:22 编辑

因为c语言的标准,如果你在程序中直接写小数,它会默认为double型,并以科学计数法存储数据。
当你将double型数据改为float型时,编译器自动使用缩约过程,所以会出现其上情况。
修改办法,改用double型,或者将输出改成printf("%.2f\n",c);当它以两位小数输出自动四舍五入。
板凳
 楼主| 发表于 2013-4-24 13:46:48 | 只看该作者
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5.     float a,b,c;
  6.     a=45.65;
  7.     b=87.63;
  8.     c=a+b;   
  9.     printf("%f\n",c);
  10.     system("pause");
  11. return 0;
  12. }
复制代码
原来可以直接插代码。?
地板
发表于 2013-4-24 21:43:28 | 只看该作者
要保留小数吗,写%.2f
5#
发表于 2013-4-25 14:43:14 | 只看该作者
小数点后想保留几位数 就写%.xf(x为想保留的几位数)
6#
 楼主| 发表于 2013-4-25 18:45:33 | 只看该作者
我知道怎么保留几位。但是问题是我没按保留几位它结果是错的。原因是什么。不然下次复杂一点的运算错了我有看不出来那怎么办。
7#
发表于 2013-4-27 01:31:23 | 只看该作者
mll 发表于 2013-4-25 18:45
我知道怎么保留几位。但是问题是我没按保留几位它结果是错的。原因是什么。不然下次复杂一点的运算错了我有 ...

因为内置的float型和double型本来就不是精确值(是二进制近似)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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