单片机中浮点数转字符数组的方法(sprintf 函数)

小歆11年前单片机06247

sprintf函数

函数功能:把格式化的数据写入某个字符串
头文件:stdio.h
函数原型:int sprintf( char *buffer, const char *format, [ argument] … ) ;
返回值:字符串长度(strlen)

例如:


uint8 buf[16];
double word_sou = 3.1415926;
n = sprintf(buf,"%f",word_sou);

结果:


buf={'3','.','1','4','1','5','9','2','6'};//字符数组
n=9;//buf数组中元素的个数

格式更多说明:

"
%a │读浮点值(仅适用于 C99)
%A │读浮点值(仅适用于 C99)
%c │读单字符
%d │读十进制整数
%i │读十进制、八进制、十六进制整数
%e │读浮点数
%E │读浮点数
%f │读浮点数
%F │读浮点数(仅适用于 C99)
%g │读浮点数
%G │读浮点数
%o │读八进制数
%s │读字符串
%x │读十六进制数
%X │读十六进制数
%p │读指针值
%n │至此已读入值的等价字符数
%u │读无符号十进制整数
%% │读 % 符号(百分号)

PS:有些时候%g会出错,所以最好是用%f;并且可以使用下面这段程序来达到%g的效果!

//定义变量
uint8 n,i;
uint8 word_str[16];
double word_sou = 3.14;

//浮点数转字符串
n = sprintf(word_str,"%f",word_sou);
i = n; //记录字符数组元素的个数

//消除结果后多余的“0”
while(word_str[--i] == '0')
{
word_str[i] = '\0';
}

//消除结果后多余的“.”
if(word_str[i] == '.')
{
word_str[i] = '\0';
i--;
}

相关文章

STM8串口接收中断无法进入问题(STM8L051/101F3)

STM8串口接收中断无法进入问题(STM8L051/101F3)

前言最近弄了一块STM8L051/101F3开发板,打算简单玩一玩。在我IO和定时器都没问题后我开始配置串口UART时发现接收中断始终无法进入,发送中断都是没问题的,之后我就开始了为期两天的问题排查,...

STM32基本开发流程(以GPIO为例)

初学stm32,在此总结一下stm32的基本开发流程,就当总结规律方便以后进一步学习;本文所有内容都是基于ST库3.5版本的个人见解! 时钟部分 个人理解,为了降低功耗s...

Google官方C++编程规范手册

Google官方C++编程规范手册

Google C++ 编程规范 目录: 下载地址:       小歆网盘:Google C  编程规范(541.98 KB...

STM32 V3.5.0 工程模版

STM32 V3.5.0 工程模版

STM32_V3.5.0工程模版 MDK环境下利用STM32库V3.5创建工程的模板! 下载地址:STM32_V3.5.0工程模版(701.27 K...

卡尔曼滤波器算法(C语言)

卡尔曼滤波器算法(C语言)! }* v) v/ j" }4 a3 `/ l     将高斯过程回归融入平方根无迹卡尔曼滤波(SRUKF)算法,本文提出了一种不确定系统模型协方...

小歆STM32工程模板(基于ST3.5库文件)

建立工程的步骤:  1.新建工程到..\Project\RVMDK文件夹内; 2.选择芯片型号(STM32F103VE); 3.提示是否导入启动文件,点击否;...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。