| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2082 人关注过本帖
标题:进制转换小数部分求助
只看楼主 加入收藏
tedwugood
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2010-10-7
结帖率:60%
收藏
已结贴  问题点数:10 回复次数:7 
进制转换小数部分求助
这是我编的10进制转4进制的程序 要求保留两位小数 可以运行但是小数部分结果误差很大 求大神指导

#include<stdio.h>
int main(void)
{
   double num,xs,b=0,result; int sum=0,i=0,j=1,zs,num_int,xs_int;
     scanf("%lf",&num);
    //整数部分 没有问题//
zs=num;
    while(zs)
    {
        sum+=zs%4*pow(10,i);
        zs/=4;
        i++;
    };zs=sum;
   //小数部分 好大的误差//
 num_int=num;
   xs=num-num_int;
   for(xs_int=xs;xs-xs_int!=0.00&&j<=2;j++) {      
xs=xs*4;xs_int=xs;
       b+=xs_int/pow(10,j);
       xs=xs-xs_int;
   };result=sum+b;
   printf("%.2f",result);
    return (0);
}

还有声明变量时为什么把double换成float就不行了

[ 本帖最后由 tedwugood 于 2010-10-10 01:36 编辑 ]
搜索更多相关主题的帖子: 进制 小数 
2010-10-10 01:25
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
收藏
得分:3 
小数部分要考虑四舍五入和精度问题,比整数部分麻烦很多,还有,不能使用pow函数在进制转换里

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2010-10-10 01:42
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
收藏
得分:0 
换float的话,你scanf("%lf",&num);这个也得改啊

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2010-10-10 01:43
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:3 
有你这么转的么
你这么搞肯定会导致很大的误差的
凡是数据存储都是二进制
两个二进制位对应一个4进制位
你可以将存储,读取啊都交给系统来做
就写一个提取单byte的函数,将两个二进制合并为一个变为4进制 进行输出,运算等操作
让最底层还是以二进制的形式进行操作得了!所有的进制不外乎都是以不同的形式显示给别人看
但最底层还是要借助2进制的!
float和double 一个单精度 一个双精度,输出和输入的格式都不一样了,你换了类型能不换格式么!
2010-10-10 09:26
tedwugood
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2010-10-7
收藏
得分:0 
回复 2楼 御坂美琴
为什么不能用pow啊 编译时确实有这个的warning 但是不影响运行啊 如果不用pow要用什么语句呢?
2010-10-11 03:08
tedwugood
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2010-10-7
收藏
得分:0 
回复 4楼 hahayezhe
多谢 但是您说的提取单byte是什么意思 我也想先转成2进制但是我不知道怎么用循环语句进行下一不两两相加 求指导
2010-10-11 03:12
深蓝之恋
Rank: 2
等 级:论坛游民
帖 子:7
专家分:10
注 册:2010-8-7
收藏
得分:3 
首先pow这个函数要求的是用double来定义,而且你这个函数还少了一个头文件“<math.h>”
2010-10-11 05:42
深蓝之恋
Rank: 2
等 级:论坛游民
帖 子:7
专家分:10
注 册:2010-8-7
收藏
得分:0 
而且楼主,你应该多注意一下书写,比如说在强制转换时,你加一个(int) ,至少可以让人一下就看出来,不然还要倒回去查找一下。
2010-10-11 05:47
快速回复:进制转换小数部分求助
数据加载中...
 
   



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

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