我写了一个函数,关于IC卡的,/**********************************读卡存气量*********************************/
//功能:读卡存气量
//参数:flReadBuy返回的卡存气量,_bReadTime返回的购气时间,_bReadCode返回的购气序号
//返回值:0正确,其它错误
/**********************************END*********************************/
int WJ4442Card_ReadBuy(float* flReadBuy,BYTE* _bReadTime,BYTE*_bReadCode)
{
         BYTE bRTime[5],bRCode[2],bRBuy[2]; 
         BYTE sbRData[2];
float sdate;
     int st;
if (iVer==3)
{
st = SLE4442_ReadChar(42,6,bRTime);// 购气时间
if (st == 0)
{
                            memcpy(_bReadTime,bRTime, 6);  
 st=SLE4442_ReadChar(40,2,bRCode);//购气序号
 if (st == 0)
 {
                memcpy(_bReadCode,bRCode, 2); 
 st=SLE4442_ReadChar(38,2,bRBuy);//这个有问题
 if (st == 0)
 {  
                                               sdate=float(int(bRBuy[0])*100+int(bRBuy[1])/100);
                                               sbRData[0]=sdate;
 memcpy(flReadBuy,sbRData, 1);
 }
 }
}  
}
else
   {
     st=1;
   }
return st;
}
我调用这个函数后,本想读出这个浮点数flReadBuy,存在那里应该是12.34,但是读出来的确是1点多,很长的小数位,

解决方案 »

  1.   

    封杀float  ,
    坚决使用double
      

  2.   

    我就定义了个浮点数,调用下函数,将flReadBuy赋值到定义的量上,得出的数字是1.数字e-41,看得出小数点很多位
      

  3.   


    sdate=float((int(bRBuy[0])*100+int(bRBuy[1]))/100);
    *flReadBuy=float(sdate);我改成这样,但只输出12
      

  4.   


    sdate=float((int(bRBuy[0])*100+int(bRBuy[1]))/100.00);
    *flReadBuy=float(sdate);
    这样就正确了,自己把问题解决了