啊哈磊_编程从这里起步

标题: 计算机傻了吧。。。。。。。 [打印本页]

作者: 南风时    时间: 2013-8-6 21:49
标题: 计算机傻了吧。。。。。。。
int main()
{
    float a,b,c;
    a=5.2;
    b=3.1;
    c=a+b;
    printf("%f",c);


    system("pause");
    return 0;
}


为何计算结果为8.299999,不是明摆着是8.3嘛。

作者: cdbzlp    时间: 2013-8-6 22:47
float型在内存占32位,有些十进制数在转化为2进制数时会精度损失
作者: rosynirvana    时间: 2013-8-6 22:54
因为计算机中的浮点数和你理解的实数不是一种东西
作者: 超神级    时间: 2013-8-7 07:39
兄弟你好犀利
作者: sky0521    时间: 2013-8-7 10:29
IEEE754精确规定 0.1 + 0.2 =0.30000000000000004
作者: sanfen    时间: 2013-8-9 18:17
因为浮点型数据不能完全被精确存储,有些可以,有些是不可以的。
作者: sanfen    时间: 2013-8-9 18:19
因为浮点型数据(float和double)都不能保证可以精确的存储一个小数
作者: 梦中的婚礼    时间: 2013-8-11 19:32
浮点数不等于实数
作者: 4k-Rn    时间: 2013-8-27 16:27

浮点数不等于实数
作者: guoliang    时间: 2013-9-16 18:57
把printf("%f",c);改成printf("%.1f",c);
.1就显示一位小数  .2就显示两位小数,,依次类推
作者: 1935515130    时间: 2014-3-14 19:44
代码如下:#include <stdio.h>
#include <stdlib.h>
int main()
{
    double a,b,c;
    a=5.2;
    b=3.1;
    c=a+b;
    printf("%lf",c);
    system("pause");
    return 0;
}
作者: 葛奕成    时间: 2014-3-17 17:09
这样吧:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5.     double a,b,c;
  6.     a=5.2;
  7.     b=3.1;
  8.     c=a+b;
  9.     printf("%lf",c);
  10.     system("pause");
  11.     return 0;
  12. }
复制代码





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