数码之家

 找回密码
 立即注册
搜索
查看: 1447|回复: 16

[C51] 如何添加一个除以100的程序代码

[复制链接]
发表于 2022-6-5 12:31:36 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 yyou58 于 2022-6-5 18:12 编辑

if(re_count>=7) //收到一个7组数据
{

  numm = re_buf[3]*256; //将3组数据转十进制串口发出来,乘以256
  numm = numm + re_buf[4];

  // tt = re_buf[4];//将4组数据转十进制串口发出来,以0数字开始数

上面的程序是接收到十六进制 只接收第三位数据是比如是03,第4位数据比如是B6,03 转换成十进制是3在乘以256,得出768,B6转换成十进制是182,然后768+182=950,问题来了

如何添加一句代码 让950除以100 得出9.5呢?



串口数据输出

        if(numm>999)
   {
    SendString("n0.val=");
    SendData(numm/1000%10 + 0x30);
    SendData(numm/100%10 + 0x30);
    SendData(numm/10%10+ 0x30 );
   SendData(numm%10+ 0x30);
         }




发表于 2022-6-18 21:01:51 | 显示全部楼层
sprintf(buff,%3.1f,(float *)x);
SendString(buff);
不就行了,简简单单。
回复 支持 反对

使用道具 举报

发表于 2022-6-18 20:58:47 | 显示全部楼层
用sprintf函数把需要的格式转到一个数组里,再用显示字符串函数把这个数组显示出来不能满足要求吗?
回复 支持 反对

使用道具 举报

发表于 2022-6-16 16:38:33 | 显示全部楼层
哈哈  这个格式  是用的淘晶驰的串口屏吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-7 19:56:09 | 显示全部楼层
谢谢上面那位朋友指点 总算搞定了 做的是一个电压表通过串口上传到物联网上面用的
360截图-1230823250.jpg
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-7 19:46:40 | 显示全部楼层
lkc8210 发表于 2022-6-7 15:08
纯输出到串口
    SendString("n0.val=");
        if(numm>999)

赞 你这个方法可行
回复 支持 反对

使用道具 举报

发表于 2022-6-7 15:08:32 | 显示全部楼层
纯输出到串口
    SendString("n0.val=");
        if(numm>999)
   {
    SendData(numm/1000%10 + 0x30);
         }
    SendData(numm/100%10 + 0x30);
SendData('.');//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    SendData(numm/10%10+ 0x30 );
   SendData(numm%10+ 0x30);
回复 支持 反对

使用道具 举报

发表于 2022-6-5 18:19:58 | 显示全部楼层
yyou58 发表于 2022-6-5 14:58
早就试过了,950除以100 但是只显示9 后面2位不显示怎么搞

强制转换数据类型啊,输出用的啥?printf?    用%f,可以知道显示小数位数

或者,先取百位,后面取余,自己加小数点输出
回复 支持 反对

使用道具 举报

发表于 2022-6-5 17:44:31 | 显示全部楼层
数据类型统一
看接口接受什么样的数据
不支持浮点的话,只能两次单独传,在上位机再合成
一半数据处理交给上位机
回复 支持 反对

使用道具 举报

发表于 2022-6-5 17:27:56 来自手机浏览器 | 显示全部楼层
yyou58 发表于 2022-6-5 14:58
早就试过了,950除以100 但是只显示9 后面2位不显示怎么搞

这种算法是整型,所以取值是整数。要换成浮点算法。
我前面写的也是错的
回复 支持 反对

使用道具 举报

发表于 2022-6-5 17:14:56 | 显示全部楼层
yyou58 发表于 2022-6-5 14:58
早就试过了,950除以100 但是只显示9 后面2位不显示怎么搞

那是您的数据格式是整数,小数部分“溢出”了。
回复 支持 反对

使用道具 举报

发表于 2022-6-5 17:03:02 | 显示全部楼层
本帖最后由 hujj 于 2022-6-5 17:43 编辑

楼主好象没注意数据的格式,不同的编译平台数据格式也许会稍有不同,但基本上分了8位无符号或带符号整数、16位无符号或带符号整数、浮点数等等,这些数据都有其最大和最小值范围,超出这个范围则会溢出,溢出后这个数据就不是您所期望的值了。通过串口输出可以利用重定向功能使用printf函数强制转换为指定的数据格式,具体使用可百度。针对楼主的问题其实可以用下面的代码:
float numm;
numm = (re_buf[3]<<8 + re_buf[4]) / 100;
printf("%f/r/n",numm);

甚至于可以缩略为:
printf("%f/r/n", (re_buf[3]<<8 + re_buf[4]) / 100)
回复 支持 反对

使用道具 举报

发表于 2022-6-5 15:20:40 | 显示全部楼层
需要复习一下  C语言了    都忘了
回复 支持 反对

使用道具 举报

发表于 2022-6-5 15:05:58 | 显示全部楼层
950除以100 得出9.5

不是 950/100

而是
950/100.0


浮点运算
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-5 14:58:13 来自手机浏览器 | 显示全部楼层
ploestar 发表于 2022-6-5 14:25
/100不就行了么,转成float,输出时格式注意一样

早就试过了,950除以100 但是只显示9 后面2位不显示怎么搞
回复 支持 反对

使用道具 举报

发表于 2022-6-5 14:25:49 来自手机浏览器 | 显示全部楼层
/100不就行了么,转成float,输出时格式注意一样
回复 支持 反对

使用道具 举报

发表于 2022-6-5 14:19:40 来自手机浏览器 | 显示全部楼层
本帖最后由 亲爱的混蛋 于 2022-6-5 14:24 编辑

num1==numm/100+numm/10%10/10
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-6-8 07:08 , Processed in 0.405600 second(s), 14 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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