| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 444 人关注过本帖
标题:哪位高手帮我看看,为什么,得到的结果总是有误差啊!
只看楼主 加入收藏
jipeng001
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-5-5
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
哪位高手帮我看看,为什么,得到的结果总是有误差啊!
#include <stdio.h>
#include <math.h>
void main()
{double i,j;
char p;
int s;
long l;


printf("Please input the formula:");
scanf("%lf%c%lf",&i,&p,&j);

switch(p)
{case '+':s=i+j;l=(i+j-s)*pow(10,6);break;
 case '-':s=i-j;l=(i-j-s)*pow(10,6);break;
 case '*':s=i*j;l=(i*j-s)*pow(10,6);break;
 case '/':if(j!=0){s=i/j;l=(i/j-s)*pow(10,6);break;}
 default: printf("error\n");
}


while(l%10==0) l=l/10;  //我是想用它把结果小数末尾中的全部去掉的//
printf("结果为%d.%ld\n",s,l);


}
搜索更多相关主题的帖子: default include double 
2011-05-05 12:42
zhuzhidu784
Rank: 1
等 级:新手上路
帖 子:12
专家分:4
注 册:2011-5-3
收藏
得分:4 
case '+':s=i+j;l=(i+j-s)*pow(10,6);break;
case '-':s=i-j;l=(i-j-s)*pow(10,6);break;
case '*':s=i*j;l=(i*j-s)*pow(10,6);break;
case '/':if(j!=0){s=i/j;l=(i/j-s)*pow(10,6);break;}
你程序每个l不都为0吗

我的生活不是因为玩而精彩!!!而是因为怎么玩而精彩!!!!!!!!!!
2011-05-05 13:10
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
收藏
得分:4 
switch(p)
{case '+':s=i+j;l=(i+j-s)*pow(10,6);break;
case '-':s=i-j;l=(i-j-s)*pow(10,6);break;          //s为int,i,j为double,这不对吧,且如果都改为double,l都为0
case '*':s=i*j;l=(i*j-s)*pow(10,6);break;
case '/':if(j!=0){s=i/j;l=(i/j-s)*pow(10,6);break;}
default: printf("error\n");
}

我不明白楼主的switch啥意思?楼主想求啥东西啊?
2011-05-05 13:35
jipeng001
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-5-5
收藏
得分:0 
回复 2楼 zhuzhidu784
i,j都为double型,s为int,例如i+j-s为其中的小数部分啊,然后我再用pow函数把小数部分全部转化为整数后面多出来的0,用while循环把末尾后面的0去掉,输出的时候用printf函数,前面的%d为整数后面再加一个点,后面的%d为去除末尾0的小数部分,这样就是一个完整的数据啦;不知道为什么结果老是会有误差~~
2011-05-05 21:37
obstratiker
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:198
专家分:758
注 册:2011-5-5
收藏
得分:4 
看出了几个bug,
如果输入为  .01  .001或者小数点右边一开始的数是零的数时,
while(l%10==0) l=l/10  会使它们变为十分位小数,如输入 1.01+1.01,就会得到2.2

另外一个是如果输入得出的和数恰好为整数的话,l就始终为零了,
如输入 1.01+0.99,这时while(l%10==0) l=l/10 ;是死循环
2011-05-05 22:26
ucyan
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:61
专家分:198
注 册:2011-4-12
收藏
得分:4 
你想把long型的l的值后面的小数部分去掉,可以把l强制转换为int型啊~~
2011-05-05 22:35
那年
Rank: 3Rank: 3
来 自:湖南
等 级:论坛游侠
帖 子:83
专家分:141
注 册:2011-5-3
收藏
得分:4 
乱七八糟的   另外  告诉你  控制小数点后面0的个数  用输出语句就可以控制了


              人生莫大的悲哀是不能坚持,今天计划明天,明天念着后天,这样总难成事。
2011-05-05 22:46
快速回复:哪位高手帮我看看,为什么,得到的结果总是有误差啊!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016011 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved