解决方案 »
- 初学COM,一个实例问题,请大家指点一下,在线等
- 用vector实现字符串分割封装成函数不能实现的问题,多谢!
- 如何在FILETIME和time_t之间相互转换(不用CTime,因为没用MFC)
- 怎么模仿IE那样把HTML文件存成单个文件MHT
- excel读写问题
- 兼职项目
- 串口数据线该怎样接啊?
- 网络地址格式的如何转换?
- 新手问题,请各位帮忙救急!谢谢!
- ******************好奇怪!明明相同的两个字符串却被认为不同??****************
- def文件关于”注释不能与语句共享一行 “的疑惑
- 通过花生壳远程连接sql2000数据库的问题 ,百思不得其解,求救!!!!!!
刚才在网上找到了一段
int ConvertBCD(int dnum)
{
int bcdval=0;
if( dnum> 9999 || dnum < 0 ) return -1;
bcdval = ( ( (dnum/1000)*16+(dnum%1000)/100)*16+(dnum%100)/10 )*16 +dnum%10;
return bcdval;
}
百度百科上都有BCD码,上面还有算法描述
http://baike.baidu.com/view/45179.htm你带小数也不怕,分为2部分不就可以了吗
1005.01 这个01取消出来,取出来的是1前面少了一个0
int ConvertBCD(int dnum)
{
int bcdval=0;
if( dnum> 9999 || dnum < 0 ) return -1;
bcdval = ( ( (dnum/1000)*16+(dnum%1000)/100)*16+(dnum%100)/10 )*16 +dnum%10;
return bcdval;
}void CDsafDlg::OnButton1()
{ CString str; double d = 1005.01;
int nNow=int(d);
double dNow=d-nNow;
for (int sd=1;sd<=2;sd++)
dNow *= 10; str.Format("%d,%d",ConvertBCD(nNow),ConvertBCD(dNow));
MessageBox(str);
}
char * a = new char ; //要写入到文件的字符串
//取得整数部分
int nNo = (int)nNowValue;
//取得小数部分 +0.00001是为了解决转换不稳定
double dDot=nNowValue-nNo+0.00001;
//这里只取4位整数和4位小数
//事例:10005.01
int nNoH = nNo / 100; //取1005.01的10
int nNoL = nNo % 100; //取1005.01的05 这里取出来的只有5放心,后面可以解决
int dDotH = dDot * 100; //取1005.01的01 这里同样取出来的只有1,不是01,放心,后面可以解决
int dDotL = dDot * 10000 - dDotH * 100; //取1005.01中01后面的00
a[0]=2;//小数点的位数
a[1]=nNoH;
a[2]=nNoL;
a[3]=dDotH;
a[4]=dDotL;这样就可以了。最后在解码的时候
CFileDialog fDlg(TRUE,"txt","a",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"txt文件(*.txt)|*.txt|全部文件(*.*)|*.*||");
if (fDlg.DoModal() != IDOK) return;
//读取文件内存变量
CFile fFile(fDlg.GetPathName(),CFile::modeRead|CFile::typeBinary);
//读取到文本文件的内存变量
char * szBuff = new char[fFile.GetLength()];
//开始读取文本文件
fFile.Read(szBuff,fFile.GetLength());
CString str,strTemp; //////////////////////////////////////////////////////////////////////////
// 计算Y值 开始 //取到保留小数点的位数
strTemp.Format("%d",szBuff[0]);
//将取到的字符串转换成整数
int nDotPos = atoi(strTemp);
//将全部Y值取出,此处没有小数点位置
strTemp.Format("%02d%02d%02d%02d",szBuff[1],szBuff[2],szBuff[3],szBuff[4]);
//将取出的Y值从字符串转换为整数,来用转换为小数,
//+0.00001解决转换小数位太长,Y值失真问题
int nYValue = atoi(strTemp) + 0.00001;
//将无小数点的Y值转换为小数
double dYVlaue = nYValue * 0.0001; //用来格式化字符串的格式字符串
char strFormat[10];
//将strFormat格式化为"%.2f"其中2为保留的小数位
sprintf(strFormat,"%%.%df",nDotPos);
strTemp.Format(strFormat,dYVlaue);
//添加到列表中
m_list.SetItemText(nSum,2,strTemp); // 计算Y值 结束
//////////////////////////////////////////////////////////////////////////好了,结贴了。