串口屏显示“@08.0“?数字拆分溢出的坑

📅 2026/8/11 10:09:09
串口屏显示“@08.0“?数字拆分溢出的坑
一句话: 屏上数值从1596.1显示成96.1、1608.0显示成08.0——推送显示代码按3位整数1位小数拆分数值到千位时商是两位数塞进单个字符就溢出成?和。加了万位分支就解决。适合谁读用串口屏显示数值、遇到过数字显示成乱码字符的嵌入式工程师。现象96.1 和 08.0串口屏上两个控件显示异常一个控件显示 96.1实际应该是1596.1另一个控件显示 08.0实际应该是1608.0丢了一位整数还出现 这种怪字符——不是普通的显示截断。根因数值拆分商是两位数塞进单字符推送显示代码把数值放大 10 倍后按位拆开1596.1×10 15961然后u16Val 15961; Buff[7] u16Val / 1000 0x30; // 15961/1000 15 → 150x30 0x3F ?15961 / 1000 15——商是两位数塞进单个字符位置就溢出成0x3F?。16080/1000 16 → 0x40 。显示代码原本只处理3 位整数商 10值到千位时商变成两位数塞不下了实际值×10商/1000塞进单字符显示1596.115961150x3F ?96.1丢了1位1608.016080160x40 08.0修复补上万位分支显示代码按位数分了支处理 09、1099、100~999……但缺了≥10000这一档4 位整数。补上即可和另一个显示控件对齐if (u16Val 10000) { // 4位整数 1位小数 }经验数值拆分按位数扩展时要同时扩展分支——加了万位就要加 ≥10000 分支位数和分支一一对应显示异常?/ 这种怪字符往往是数字/字符转换溢出——看到怪字符先查拆分代码的分支覆盖同一个格式代码改了一处另一处也要对齐——这次是两个控件用同一套路修一个漏一个就还是错实测对比缺万位分支1596.1显示成96.11608.0显示成08.0 | 补万位分支4位整数1位小数显示正确有用的话点个收藏下次调试直接用。有问题欢迎评论区交流看到了都会回。下一篇串口屏按钮抬起生效——避免按一次跳两步——按钮事件处理的正反两面