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

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

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:320
  • 最近打卡:2025-05-02 21:03:38

10

主题

24

回帖

1146

积分

金牌会员

积分
1146
发表于 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

回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:320
  • 最近打卡:2025-05-02 21:03:38

10

主题

24

回帖

1146

积分

金牌会员

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

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-3 03:12 , Processed in 0.273161 second(s), 54 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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