找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3398|回复: 6
打印 上一主题 下一主题
收起左侧

在使用oled时的问题,我想输出一个浮点数,但是我的OLED库不好用,所以打算用sprintf

[复制链接]
跳转到指定楼层
楼主
10黑币
问题如图,我想把浮点数变成字符串

2.png (10.67 KB, 下载次数: 71)

2.png

22.png (13.17 KB, 下载次数: 78)

22.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:952668 发表于 2021-7-31 07:23 来自手机 | 只看该作者
fadc3jieguo是一个浮点数
回复

使用道具 举报

板凳
ID:161164 发表于 2021-7-31 10:17 | 只看该作者
#include了stdio.h吗?
sprintf不能这样用的吧?
正确用法:
  1.     char string[10];
  2.     sprintf(string,"%.1f\r\n",floVal);
  3.     printf(string);
复制代码


floVal 是一个浮点数


回复

使用道具 举报

地板
ID:955239 发表于 2021-7-31 11:58 | 只看该作者
把浮点数放大,变成整形打印,然后自己想办法换算显示。
回复

使用道具 举报

5#
ID:401564 发表于 2021-7-31 13:37 | 只看该作者
拿来主义并不好,我也是刚好这几天在做这个OLED(SH1106驱动)显示,然后也是上网找,书本翻,烧录上百次才理解这个函数,从不仿真,那太坑人了

//========================================================================================
void Display_oled_double(unsigned char Page,unsigned char Start_SEG,double dat)                        //显示一个双精度浮点数据
{
                char   k[12];                 //这里不能加code限定符,否则计算不正确
                unsigned char a;
                sprintf(k,"%.2f",dat);//dat是一个浮点数,可以其它类型,unsigned char unsigned long int.......都行,无所谓的,2f是取两个小数点后面的数1.00这样
                for(a=0;k[a]!='\0';a++)//这个是检测字符串有没有结束,C语言字符是以'\0'为结尾的
                {       
                Display_oled_Shuzi_1(Page,Start_SEG,k[a]); //这是显示函数,你自己写
                  Start_SEG=Start_SEG+8;
                }
}
sprintf实际上是把bat分解成字符串,然后分别存放在数组 k中,一个地址存放一个字符串.k的长度10个左右就差不多了
比如:bat为:12.345
那么,sprintf执行之后
K的0地址为"1"
1地址为"2"
2地址为"."
3地址为"3"
4地址为"4"
后面的"5"就没有了,因为"%.2f"指定小数点后面只有两位数,你也可以试下"%.5f"看一下是什么样子的
记住,数组里存放的是字符串,不是字符!!!!!!
所以,0地址的值实际上是1在ASCII中的值:49
这个函数会自动处理负号和小数点,最后会以'\0'结束,检测有没有'\0'就可以了


回复

使用道具 举报

6#
ID:928549 发表于 2021-7-31 16:04 | 只看该作者
直接写个浮点数转字符串的函数试试
void flo_to_str(float flo,char* str_,int n)
{
        int temp,i,j;
        if (flo>=0)
                str_[0]='+';
        else
        {
                str_[0]='-';
                flo = -flo;
        }
        temp = (int)flo;
        for(i=0;temp!=0;i++)
        {
                temp /=10;
        }
        temp = (int)flo;
        for (j=i;j>0;j--)
        {
                str_[j] = temp%10+'0';
                temp /=10;
        }
        str_[i+1] = '.';
        flo -=(int)flo;
        for (i=i+2;i<n;i++)
        {
                flo *=10;
                str_[i] = (int)flo+'0';
                flo -=(int)flo;
        }
        //str_[n-1] = '\0';
}

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

7#
ID:584195 发表于 2021-8-5 07:16 | 只看该作者
1093562897 发表于 2021-7-31 16:04
直接写个浮点数转字符串的函数试试
void flo_to_str(float flo,char* str_,int n)
{

学习了!这个解决了我的问题!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表