我写了一个函数,关于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点多,很长的小数位,
//功能:读卡存气量
//参数: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点多,很长的小数位,
坚决使用double
sdate=float((int(bRBuy[0])*100+int(bRBuy[1]))/100);
*flReadBuy=float(sdate);我改成这样,但只输出12
sdate=float((int(bRBuy[0])*100+int(bRBuy[1]))/100.00);
*flReadBuy=float(sdate);
这样就正确了,自己把问题解决了