| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1709 人关注过本帖
标题:把double类型转换成BCD链时出现问题
取消只看楼主 加入收藏
yyf8421bcd
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2017-1-22
结帖率:100%
收藏
已结贴  问题点数:14 回复次数:3 
把double类型转换成BCD链时出现问题
现有一c程序,作用是把整数部分为两位的double类型转化成定长BCD链
例如:
有一个 double 类型的数字是 2.87
相应的3位BCD链中的内容是 0X02,0X87,0X00

我写了一个转换函数如下:

unsigned char * Dou2BcdCh(double data,int len){
//将double类型转化为BCD链
//data待转换的double类型数据,它的整数部分最多两位,最少0位
//len BCD链的总长   
int i,k;   
int i,k;
unsigned char *Chain;
double temp=data;
int integer;   
printf("data is %lf \r\n",data);
Chain=(unsigned char*)malloc(
                len*sizeof(unsigned char)
               );
for(i=0;i<len;i++){
k=1;         
while(temp>=(double)(1.0)){
    temp=temp-(double)(1.0);
    printf("*****while*****%d\r\n",k);
    k++;
}
integer=data-temp;
printf("data is %lf,temp is %lf ,integer is %lf,%d\r\n",data,temp,integer,integer);
Chain[i]=Dec2Bcd(integer);//Dec2Bcd 将一个两位整数转化为相应的BCD码        
data=temp*(double)(100.0);
printf("data = %lf \r\n",data);
temp=data;           
printf("temp= %lf\r\n",temp);
}   
for(i=0;i<len;i++)
printf("0X%x ",Chain[i]);
printf("\r\n");
return Chain;
}

调试中出现的问题如下:
对于 输入2.87 正确的输出 应该为
0x2 0x87 0x00
实际上的输出却为
0x2 0x86 0x99

对于 输入 2.15 正确的输出 应该为
0x2 0x15 0x00
实际上的输出为
0x2 0x14 0x99

观察程序输出结果,感觉最有可能是while循环那里除了问题,
但是真实的原因是什么呢?解决方案是?
谢谢各位!

附:
1.
unsigned char Dec2Bcd(int dec)
{
    unsigned char bcd,high,low;
    high=dec/10;
    low=dec%10&0x0f;
    bcd=high<<4|low;
    return bcd;
}


搜索更多相关主题的帖子: double c程序 
2017-03-29 10:19
yyf8421bcd
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2017-1-22
收藏
得分:0 
回复 2楼 wp231957
把原始数据从2.87换成2.8700确实可以
但是有没有其它办法,使得原始数据是2.87的时候仍旧可行?
2017-03-29 10:34
yyf8421bcd
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2017-1-22
收藏
得分:0 
回复 2楼 wp231957
原始数据是2.1500时 问题依旧出现
2017-03-29 10:36
yyf8421bcd
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2017-1-22
收藏
得分:0 
回复 5楼 wp231957
原始数据就是 直接写一个小数直接作参数

往原始数据上加一些东西就解决
比如
2.87 ,3写参数的时候写成2.870009,3就可以了
但是总感觉这样有很多隐患
2017-03-29 10:54
快速回复:把double类型转换成BCD链时出现问题
数据加载中...
 
   



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

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