单片机中实现浮点数转换陈字符串

单片机中由于资源有限,如果直接使用库函数中的sprintf函数实现浮点数转换成字符串,很可能会在链接时出现RAM资源不够的错误,在网上搜到一个比较好的方法,给大家共享。


unsigned char Float2Char(float value, unsigned char*array);

可用于单片机中将浮点数的各个位的数值转换成字符串,转换结果保存在字符数组里,然后通过串口发送至串口调试助手上显示。实现方法是把浮点数的各位分别提取出来,保存成一个各元素都是ASCII码的数组。参考网上的程序并做了修改。

/********************************************************

VC6.0中测试代码
*/

#include <stdio.h>

#define uint8 unsigned char
#define uint32 unsigned int

unsigned char Float2Char(float value, unsigned char*array);

void main()
{
float fvalue = 26.8977f;
uint8 len = 0;
uint8 array[20];
uint8 i;

len = Float2Char( fvalue, array );
for( i=0; i<len; i++)
{
   printf("%c",array[i]);
}
printf("len = %d\n", len); //len = 7


}

// 函数名:unsigned charFloat2Char(float Value,char *array)
//
描 述:将浮点数的各个位的数值转换成字符串,通过串口发送至上位机显示
//
参 数:float Value为欲转换的正数浮点数值,转换结果保存在字符数组*array

unsigned char Float2Char(float value, unsigned char *array)
{
uint8 IntegerPart;
float DecimalPart;
uint8 i = 0;
uint8 j = 0;
char temp;

//分离整数和小数
if(value >= 1)
{
   IntegerPart = (uint8)value;
   DecimalPart = value - IntegerPart;
}
else
{
   IntegerPart = 0;
   DecimalPart = value - IntegerPart;
}

    //处理整数部分
if(IntegerPart == 0)
{
   array[0] = '0';
   array[1] = '.';
   i = 1;
}
else
{
   while(IntegerPart > 0)
   {
    array[i] = IntegerPart % 10 + '0';
    IntegerPart /= 10;
    i++;
   }
   i--;

//fix the result
for(j=0; j<i; j++)
{
   temp = array[j];
   array[j] = array[i - j];
   array[i - j] = temp;
}
i++;
array[i] = '.';
}

//convert the Decimalpart
i++;
array[i++] = (uint32)(DecimalPart * 10)%10 + '0';
array[i++] = (uint32)(DecimalPart * 100)%10 + '0';
array[i++] = (uint32)(DecimalPart * 1000)%10 + '0';
array[i++] = (uint32)(DecimalPart * 10000)%10 + '0';
array[i]   = '\0';

return i;
}


  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值