我在51上写了一个拆字函数,很菜,请各位大神批评指教!
函数是将一个float数拆分到一个数组中,#include "stdio.h"
//#include "reg51.h"
#include "math.h"
//拆字函数
//入口变量ft ,n浮点数据,小数点保留位数
//传出参数 m,字符位数
unsigned char tempd={0,0,0,0,0,0,0,0,0,0,0,0};
unsigned char SpeaData(float ft,unsigned char n)
{
unsigned char i=0;
unsigned long int temp=0;
double t;
unsigned char m=0,ss=48;
//for(i=0;i<n;i++)
//ft=ft*pow(10,n);
//拆分整数部分
if(ft<0)
{
tempd='-';
ft=0-ft;
temp=(unsigned long int)ft;
}
for(i=0;pow(10,i)<temp;i++);
do
{
t=pow(10,i-1);
t=(double)temp/t;
t=(unsigned int)t%10;
tempd=(unsigned char)t+48;
//tempd=(unsigned char)((unsigned int)(temp/(unsigned long int)pow(10,i-1))%10);
i--;
}while(i);
//拆分小数部分
if(n)
{
tempd='.';
ft=ft-(long int)ft;
ft=ft*pow(10,n);
temp=(unsigned long int)ft;
do
{
t=pow(10,n-1);
t=(double)temp/t;
t=(unsigned int)t%10;
tempd=(unsigned char)t+48;
//tempd=(unsigned char)((unsigned int)(temp/(unsigned long int)pow(10,i-1))%10);
n--;
}while(n);
}
return m;
}
main()
{
unsigned char n=SpeaData(-9999.12345,4);
while(1);
}
运行发现有时候又乱码,不知道是什么地方的问题,例如我现在输入的9999.12345.拆完之后小数后面就会有乱码出现。求解! 这个直接用STDIO.H里面的sprintf(&Buf, "%f", value)就可以完成了。
Tliang 发表于 2013-1-14 08:29 static/image/common/back.gif
这个直接用STDIO.H里面的sprintf(&Buf, "%f", value)就可以完成了。
哥,我这个是拆下来以后准备送到12864里面显示的,而且这个代码是写在单片机里的! guwu454 发表于 2013-1-14 08:56 static/image/common/back.gif
哥,我这个是拆下来以后准备送到12864里面显示的,而且这个代码是写在单片机里的! ...
得,你这口气我也懒得解释了 用sprintf()是最简单的,就是对单片机来说占内存有点大。写液晶乱码检查数组是不是越界了,字符串数组别忘了结束符。 Tliang 发表于 2013-1-14 09:13 static/image/common/back.gif
得,你这口气我也懒得解释了
sorry 啊!我是菜鸟,我试一下您的函数啊! lxvtag 发表于 2013-1-14 09:22 static/image/common/back.gif
用sprintf()是最简单的,就是对单片机来说占内存有点大。写液晶乱码检查数组是不是越界了,字符串数组别忘 ...
所以我做的是能够返回数据长度的,这样在现实的时候就知道要写多长了,也能确定我显示的起始位置了。 我以为是拆汉字呢,所以进来瞻仰一下......
如果对速度要求不高,就用sprintf(),最好不过了,
如果嫌慢就 ft * ((显示有效位+1)*10),全部按整数计算,再四舍五入取舍最后一位。 flywater 发表于 2013-1-14 10:27 static/image/common/back.gif
我以为是拆汉字呢,所以进来瞻仰一下......
如果对速度要求不高,就用sprintf(),最好不过了,
让各位见笑了~ 我擦,这个代码是我写的?我怎么忘了?我今天又在找拆字的代码 guwu454 发表于 2013-9-10 12:03 static/image/common/back.gif
我擦,这个代码是我写的?我怎么忘了?我今天又在找拆字的代码
哈哈哈哈哈
页:
[1]