找回密码
 立即注册
查看: 89|回复: 1

请教一个小数处理偶发不对的问题

[复制链接]
  • TA的每日心情
    开心
    昨天 08:41
  • 签到天数: 67 天

    [LV.6]常住居民II

    2

    主题

    2

    回帖

    280

    积分

    中级会员

    积分
    280
    发表于 2024-3-14 11:14:55 | 显示全部楼层 |阅读模式


    买了一个OLED屏,里面有一个小数显示函数,我调用后,发现经常显示的数比实际小0.01
    用USB串口跟踪,0.01到0.09显示和实际一样,但0.10、0.11、0.12显示就要小0.01,0.13又显示正常为0.13,百思不得其解是什么原因?
    各位大神有知道是什么原因导致的吗?
    IC是8H8K64U
    显示函数如下:

    //显示2个数字
    //x,y :起点坐标
    //num1:要显示的小数
    //len :数字的位数
    void OLED_ShowNum(u8 x,u8 y,float num1,u8 len)
    {
            u8 i;
            u32 t,num;
            x=x+len*8+8;//要显示的小数最低位的横坐标
            num=num1*100;//将小数左移两位并转化为整数
            OLED_Display_GB2312_string(x-24,y,".");//显示小数点
            for(i=0;i<len;i++)
            {
                    t=num%10;//取个位数的数值
                    num=num/10;//将整数右移一位
                    x-=8;
                    if(i==2){x-=8;}//当显示出来两个小数之后,空出小数点的位置
                    switch(t)
                    {
                            case 0 :OLED_Display_GB2312_string(x,y,"0");break;
                            case 1 :OLED_Display_GB2312_string(x,y,"1");break;
                            case 2 :OLED_Display_GB2312_string(x,y,"2");break;
                            case 3 :OLED_Display_GB2312_string(x,y,"3");break;
                            case 4 :OLED_Display_GB2312_string(x,y,"4");break;
                            case 5 :OLED_Display_GB2312_string(x,y,"5");break;
                            case 6 :OLED_Display_GB2312_string(x,y,"6");break;
                            case 7 :OLED_Display_GB2312_string(x,y,"7");break;
                            case 8 :OLED_Display_GB2312_string(x,y,"8");break;
                            case 9 :OLED_Display_GB2312_string(x,y,"9");break;
                    }
            }
    }


    显示脚本:

                    t+=0.01;
                    r+=1;                               
                    printf("输出t和r:%f-%d",t,r);
                    OLED_ShowNum(0,0,t,5);//显示小数
                    OLED_ShowInt(0,2,r,5);//显示整数
                    OLED_ShowNum(0,4,t,3);//显示小数
                    OLED_ShowInt(0,6,r,3);//显示整数




    跟踪照片如下:

    0.09.jpg 0.10.jpg 0.12.jpg 0.13.jpg

    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 08:41
  • 签到天数: 67 天

    [LV.6]常住居民II

    2

    主题

    2

    回帖

    280

    积分

    中级会员

    积分
    280
     楼主| 发表于 2024-3-14 11:34:53 | 显示全部楼层
    可能我找到问题了
    估计输出0.100000,实际在单片机里是0.999999,输出就有问题,尾数加了0.005后显示正常了
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-6-15 00:53 , Processed in 0.055095 second(s), 36 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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