我在51上写了一个拆字函数,很菜,请各位大神批评指教!

2020-01-27 11:20发布

函数是将一个float数拆分到一个数组中,

  1. #include "stdio.h"
  2. //#include "reg51.h"
  3. #include "math.h"
  4. //拆字函数
  5. //入口变量ft ,n浮点数据,小数点保留位数
  6. //传出参数 m,字符位数
  7. unsigned char tempd[20]={0,0,0,0,0,0,0,0,0,0,0,0};
  8. unsigned char SpeaData(float ft,unsigned char n)
  9. {
  10.         unsigned char i=0;
  11.         unsigned long int temp=0;
  12.         double t;
  13.         unsigned char m=0,ss=48;

  14.        
  15.         //for(i=0;i<n;i++)       
  16.         //ft=ft*pow(10,n);
  17.         //拆分整数部分
  18.         if(ft<0)
  19.         {
  20.                 tempd[m++]='-';
  21.                 ft=0-ft;
  22.                 temp=(unsigned long int)ft;
  23.         }
  24.                 for(i=0;pow(10,i)<temp;i++);

  25.                 do
  26.                 {
  27.                         t=pow(10,i-1);
  28.                         t=(double)temp/t;
  29.                         t=(unsigned int)t%10;
  30.                         tempd[m++]=(unsigned char)t+48;
  31.                         //tempd[m++]=(unsigned char)((unsigned int)(temp/(unsigned long int)pow(10,i-1))%10);

  32.                         i--;
  33.                 }while(i);
  34.                 //拆分小数部分
  35.                  if(n)
  36.                 {
  37.                 tempd[m++]='.';
  38.                 ft=ft-(long int)ft;
  39.                 ft=ft*pow(10,n);
  40.                 temp=(unsigned long int)ft;
  41.                  do
  42.                 {
  43.                         t=pow(10,n-1);
  44.                         t=(double)temp/t;
  45.                         t=(unsigned int)t%10;
  46.                         tempd[m++]=(unsigned char)t+48;
  47.                         //tempd[m++]=(unsigned char)((unsigned int)(temp/(unsigned long int)pow(10,i-1))%10);

  48.                         n--;
  49.                 }while(n);
  50.                 }
  51.                 return m;
  52. }
  53. main()
  54. {
  55. unsigned char n=SpeaData(-9999.12345,4);
  56.         while(1);
  57. }
复制代码运行发现有时候又乱码,不知道是什么地方的问题,例如我现在输入的9999.12345.拆完之后小数后面就会有乱码出现。求解!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。