float m_count =3.215;//跟踪m_count=3.21500
int aaa=0;
aaa = int(m_count*1000);//a=3214了!!??为啥不是3215
byte m_byte[2];
m_byte[0] = int(m_mincellvol*1000.0)& 0x00ff;//取出低位,10进制142,16进制8E
m_byte[1]= int(m_mincellvol*1000.0)>> 8;//取出高位,10进制12,16进制0C
//高位+低位 0C8E转为10进制 3214,不是3215请问如何才能准确的取出高位和低位?

解决方案 »

  1.   

    float m_count =3.215;//跟踪m_count=3.21500 int aaa=0; aaa = int(m_count*1000);//a=3214了!!??为啥不是3215 byte m_byte[2]; 
    int(m_count*1000 + 0.5);  //四舍五入
    m_byte[0] = int(m_mincellvol*1000.0)& 0x00ff;//取出低位,10进制142,16进制8E m_byte[1]= int(m_mincellvol*1000.0)>> 8;//取出高位,10进制12,16进制0C //高位+低位 0C8E转为10进制 3214,不是3215
      

  2.   

    int(m_count*1000 + 0.5); //四舍五入
      

  3.   

    谢谢上面的朋友,准备散分
    那所有float的数转int都要+0.5吗?
      

  4.   

    浮点数的精度问题,转成字符串吧。
    float dTest = 3.215; 
    CString sTmp;
    sTmp.Format(_T("%f"),dTest);
    sTmp.TrimRight(_T('0')); int nPos = sTmp.Find(_T('.'));
    CString sV1 = sTmp.Left(nPos);
    CString sV2 = sTmp.Mid(nPos+1);
      

  5.   


    能解释下是怎么丢失的1么..?
    float有7位有效数字?
    3.215就等于用3.214999表示?不过我可以跟踪到3.21500啊
    乘1000=3214?
      

  6.   

    int floatToInt( float _value )
    {
    int t;
    t = (int)_value;
    float m;
    if ( _value <= 0 ){
    m = (float)( t-0.5);
    if( _value <= m)
    t = t-1;
    }else{
    m = (float)( t+0.5);
    if( _value >= m)
    t = t+1;
    }
    return t;
    }
      

  7.   

    float转换成int当然会失去精度,如果不是显示转换的话,编译器会有警告的.