工程代碼之:float型data轉換爲字符串的函數

/*************************************************************************
功能: 把float 型的data 轉換到字符串str_ptr 裏, 小數保留d 位
      d=0, 去尾
例如: data=12.3456 , 小數位數d=3   ->   "12.345"
*************************************************************************/
#define STR_END                 '\0'
unsigned char *Trans_Data_To_Disp( unsigned char *str_ptr, float data, unsigned char d )
{        
        unsigned int integral_part=0;          // 整數部分
        float decimal_part=0;                // 小數部分
        unsigned int  temp;
        unsigned char i,n;
        //整數部分
        integral_part = (unsigned int )(data);
        temp=integral_part;
        n=0;
        do
        {
                n++;
                temp=(unsigned int)(temp/10);      //得到整數部分位數n
        }while(temp!=0);
        temp=integral_part;
        for( i=0; (i<n)&&(i<20); i++)
        {
           *(str_ptr + n-1-i)=(unsigned char)(temp%10) +'0';   
         //從低位(str_ptr + n-1)開始,獲取相應位
           temp=(unsigned int)(temp/10);
        }
         //說明:因爲LCD每行最多隻有20個字符,所以有20個字符的限制,實際上float達不到這個精度 
        if( (d==0) || (i==20) )
        {                
        *(str_ptr + i) = STR_END;         //此時 i = n 或20
				str_len=n;//取字符串長度
                return str_ptr;
        }
        else
        {
        *(str_ptr + i) = '.';                //此時 i = n ,且n < 20
        }
        //小數部分
        decimal_part = data - integral_part;
        for(i=n+1; (i<d+n+1)&&(i<20); i++)
        {
        decimal_part = decimal_part * 10;
        *(str_ptr + i) = (unsigned char)(decimal_part) +'0';  
        //從高位(str_ptr + n+1)開始,獲取相應位
        decimal_part = decimal_part - (unsigned char)(decimal_part);
        }
        *(str_ptr + i) = STR_END;         //此時 i = d+n+1 或20        
        str_len=n+1+d; //取字符串長度
        return str_ptr;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章