搜索
查看: 1556|回复: 12
打印 上一主题 下一主题

怎么算

[复制链接]
跳转到指定楼层
楼主
发表于 2013-12-5 14:22:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
100*(1.1+1.2)  这个算出来应该是230,但是我这段代码算出来是230.000015,这是为什么

#include <stdlib.h>
int main()
{
float a,b,d,c,e;
    a=1.1;
    b=1.2;
    d=(b+a);
    c=100;
    e=c*d;
    printf("%f\n",e);
    system("color 2");
system("pause");
return 0;
}
沙发
发表于 2013-12-5 15:20:06 | 只看该作者
  1. double a,b,d,c,e;
复制代码

点评

嗯  发表于 2013-12-22 12:12
是这样啊  发表于 2013-12-5 16:02
板凳
发表于 2013-12-6 22:17:32 | 只看该作者
本帖最后由 cad20020601 于 2013-12-6 22:23 编辑

因为楼主在给变量c赋值时用的是整数,可变量c的类型又是浮点,这样就会存在误差。还有楼主其实不用定义那么多变量的,计算可以一次完成。
用double可以避免这个问题,so:
还有,如果要用浮点数,请用:
  1. double
复制代码
不要用
  1. float
复制代码
地板
 楼主| 发表于 2013-12-18 15:22:58 | 只看该作者
果然大神啊、、、相见恨晚啊
5#
 楼主| 发表于 2013-12-18 15:38:00 | 只看该作者
cad20020601 发表于 2013-12-6 22:17
因为楼主在给变量c赋值时用的是整数,可变量c的类型又是浮点,这样就会存在误差。还有楼主其实不用定义那么 ...

果然大神啊,相见恨晚
6#
发表于 2013-12-18 15:55:58 | 只看该作者
cad20020601 发表于 2013-12-6 22:17
因为楼主在给变量c赋值时用的是整数,可变量c的类型又是浮点,这样就会存在误差。还有楼主其实不用定义那么 ...

误差根本就不在这里……

对于楼主的问题,可以试试手动把1.1和1.2写成二进制试试……
7#
发表于 2013-12-22 11:10:28 | 只看该作者
rosynirvana 发表于 2013-12-18 15:55
误差根本就不在这里……

对于楼主的问题,可以试试手动把1.1和1.2写成二进制试试……

好吧,小的知错
8#
发表于 2013-12-22 12:11:43 | 只看该作者

嗯,隐式类型转换(f转d)只会在后面添加6个0和
  1. .
复制代码
9#
发表于 2013-12-26 11:52:35 | 只看该作者
4399APPLE 发表于 2013-12-22 12:11
嗯,隐式类型转换(f转d)只会在后面添加6个0和

f(数据类型double)转d(数据类型int, 十进制写法)怎么可能在后面加0呢
10#
发表于 2013-12-27 09:27:47 | 只看该作者
rosynirvana 发表于 2013-12-26 11:52
f(数据类型double)转d(数据类型int, 十进制写法)怎么可能在后面加0呢

额,打反了,d转f
11#
发表于 2014-4-3 23:35:54 | 只看该作者

学习了   -----小尾巴,只为字数而生,谅解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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