浮点数在串口打印函数
2015-12-24 22:33
459 查看
/********************************************************************************************************
网上的浮点数在串口打印的函数都不太完美,于是参考他们的一些算法自己写了一个比较完善的算法
可以完成包括负数和正数的浮点数转字符串的转换
****************************************************************************************************/
#include<stdio.h>
typedef unsignedchar uint8;
typedef unsignedint uint32;
uint8Float2Char(float value,uint8 *array);
void main()
{
uint8A[10];
floatvalue= -123.456789;
uint8i;
Float2Char(value,A);
printf("%s",A);
}
uint8Float2Char(float value,uint8 *array)
{
floatDecimalPart;
uint32IntegerPart;
uint8i = 0, j = 0, temp;
//分离整数和小数
if(value< 0)
{
value = -value ;
array[i++] = '-';
}
else
array[i++] = '+';
IntegerPart = (uint32)value;
DecimalPart = value - IntegerPart;
//处理整数
if(0== IntegerPart)//整数部分为0
array[i++] = '0';
else
{
while(0 != IntegerPart)
{
array[i++ ] = IntegerPart%10 + '0';
IntegerPart/=10;
}
i --;
for(j = 1; j < (i+1)/2; j++)
{
temp = array[j];
array[j] = array[i -j+1];
array[i-j+1] = temp;
}
i++;
}
array[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';
returni;
}
网上的浮点数在串口打印的函数都不太完美,于是参考他们的一些算法自己写了一个比较完善的算法
可以完成包括负数和正数的浮点数转字符串的转换
****************************************************************************************************/
#include<stdio.h>
typedef unsignedchar uint8;
typedef unsignedint uint32;
uint8Float2Char(float value,uint8 *array);
void main()
{
uint8A[10];
floatvalue= -123.456789;
uint8i;
Float2Char(value,A);
printf("%s",A);
}
uint8Float2Char(float value,uint8 *array)
{
floatDecimalPart;
uint32IntegerPart;
uint8i = 0, j = 0, temp;
//分离整数和小数
if(value< 0)
{
value = -value ;
array[i++] = '-';
}
else
array[i++] = '+';
IntegerPart = (uint32)value;
DecimalPart = value - IntegerPart;
//处理整数
if(0== IntegerPart)//整数部分为0
array[i++] = '0';
else
{
while(0 != IntegerPart)
{
array[i++ ] = IntegerPart%10 + '0';
IntegerPart/=10;
}
i --;
for(j = 1; j < (i+1)/2; j++)
{
temp = array[j];
array[j] = array[i -j+1];
array[i-j+1] = temp;
}
i++;
}
array[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';
returni;
}
相关文章推荐
- 20151221:Web复习:登陆
- 素数线性筛
- 用PL/SQL Developer 导出bmp文件时,窗口一闪而过解决办法
- 2015/12/24:嵌入式C语言的位操作随笔
- 2015/12/24:嵌入式C语言的位操作随笔
- 2015/12/24:嵌入式C语言的位操作随笔
- Swift 可选类型(补充)
- Linux虚拟主机通过程序实现二级域名绑定到子目录
- Socket长连接与短连接
- SHGetSpecialFolderPath and SHGetSpecialFolderLocation
- 求N个数以内的质数
- AD14中自定义PCB板形状
- poj 1651 Multiplication Puzzle 【区间dp】
- hdoj 2476 String painter 【区间dp】
- Codeforces 609B The Best Gift 【水题】
- Codeforces 607A:Chain Reaction 二分+递推
- 通过jquery实现页面的动画效果
- Codeforces 609A USB Flash Drives 【水题】
- 14443协议浅谈—TYPE_A与TYPE_B之比较[1]
- zepto