本帖最后由 huangxinji8 于 2012-10-10 23:48 编辑
自己写的,我也是刚学习程序,还是一个菜鸟,故把自己写的程序发出来,欢迎各位大侠指出哪里写的不好的
程序如下:
/**********************************************************
*函数名: void float32_to_str(float Num, UINT8 n, UINT8 u8Char[])
*功能: 把一个单精度浮点数转化为字符串
*入口参数:float Num, UINT8 n, UINT8 u8Char[]
*返回参数:无
*说明: Num:预转化的数据;u8Char[]:用于储存转化后的字符串
* n: 精确到小数点多少位
***********************************************************/
void float32_to_str(float Num, UINT8 n, UINT8 u8Char[])
{
UINT8 u8_digit = 0; //数据的位数
UINT8 i = 0;
UINT32 int32_temp = 0;
float f32_temp = 0.0;
f32_temp = Num < 0 ? (-Num) : (Num); //取出NUM的绝对值存于f32_temp中
for (i=0; i<n; i++) //将要显示的内容化为整数
{
f32_temp *= 10.0; //将浮点数扩大10的n次方倍
}
int32_temp = (UINT32)f32_temp; //将扩大后的浮点数转成长整型存于int32_temp中
printf_char(1, 10, int32_temp + '0');
/*把浮点数从低位开始转化为字符串*/
i = 0;
u8_digit = 0;
do{
if ((n != 0) && (i == n)) //存入小数点
{
u8Char = '.';
}
else
{
u8Char = '0' + int32_temp % 10; //从最低位储存
int32_temp = int32_temp / 10;
}
u8_digit++; //计算数据位数即字符串的长度
i++;
}while (int32_temp != 0);
/*对绝对值小于1的数进行补零*/
if ((Num > -1.0) && (Num < 1.0))
{
for (i=0; i<(n-u8_digit); i++)
{
u8Char[u8_digit + i] = '0';
}
u8Char[u8_digit + i] = '.'; //补零和小数点(0.)
u8Char[u8_digit + i + 1] = '0';
u8_digit += 2 + n - u8_digit;
}
/*加上符号位*/
if(Num < 0)
{
u8Char[u8_digit] = '-'; //在字符串末尾加上负号标志
u8_digit++; //字符串长度加1
}
/*把u8Char中的字符串高低位对调*/
for (i=0; i < (u8_digit / 2); i++)
{
UINT8 u8_temp; //中介
u8_temp = u8Char;
u8Char = u8Char[u8_digit - i - 1];
u8Char[u8_digit - i - 1] = u8_temp;
}
u8Char[u8_digit] = ' '; //字符串结尾补充一个' '
}
*注:程序中的 UINT8 为 unsigned char 类型
UINT32 为 unsigned long 类型
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
这些都是我没考虑到的,感谢您的提醒,我会改进的
一周热门 更多>