啊哈磊_编程从这里起步

标题: 为什么结果会是这样? [打印本页]

作者: mll    时间: 2013-4-24 13:35
标题: 为什么结果会是这样?
#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界面就不见了?
顺便新人报道。
作者: Teddy    时间: 2013-4-24 13:35
本帖最后由 Teddy 于 2013-4-27 11:22 编辑

因为c语言的标准,如果你在程序中直接写小数,它会默认为double型,并以科学计数法存储数据。
当你将double型数据改为float型时,编译器自动使用缩约过程,所以会出现其上情况。
修改办法,改用double型,或者将输出改成printf("%.2f\n",c);当它以两位小数输出自动四舍五入。
作者: mll    时间: 2013-4-24 13:46
  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. }
复制代码
原来可以直接插代码。?
作者: osblow    时间: 2013-4-24 21:43
要保留小数吗,写%.2f
作者: julius    时间: 2013-4-25 14:43
小数点后想保留几位数 就写%.xf(x为想保留的几位数)
作者: mll    时间: 2013-4-25 18:45
我知道怎么保留几位。但是问题是我没按保留几位它结果是错的。原因是什么。不然下次复杂一点的运算错了我有看不出来那怎么办。
作者: rosynirvana    时间: 2013-4-27 01:31
mll 发表于 2013-4-25 18:45
我知道怎么保留几位。但是问题是我没按保留几位它结果是错的。原因是什么。不然下次复杂一点的运算错了我有 ...

因为内置的float型和double型本来就不是精确值(是二进制近似)




欢迎光临 啊哈磊_编程从这里起步 (https://bbs.codeaha.com/) Powered by Discuz! X3.2