单片机 不使用浮点运算,两个数做除法怎么优雅地四舍五入

概述

       本文只要讲解,关于在单片机开发过程中可能会用到的以下运算方法。在这个就简单举个栗子。

需求:单片机 不使用浮点运算,两个数做除法怎么优雅地四舍五入。
计算公式: ((a * 10 / b) + 5) / 10;

    int a = 120;
    int b = 19;
    float c;

    c = ((a * 10 / b) + 5) / 10;

    std::cout << "%d \n" << c;

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
很好,我可以回答这个问题。以下是51单片机四位计算器,可进行四则运算,除法保留到后位的简单代码: ``` #include <reg52.h> #include <stdio.h> #define KEY P1 unsigned char code tab_num[]={ 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f }; //用于数码管显示0~9 unsigned char code tab_duan[]={0xfe,0xfd,0xfb,0xf7}; //位选 bit flag; //标志位,判断是否计算结果 unsigned int result; //储存运算结果 void delay(unsigned int i) //延时 { while(i--); } void display(unsigned int num) //数码管显示函数 { unsigned int i,wei; for(i=0;i<4;i++) { wei=num%10; //取出最低位 num/=10; //去掉最低位 P0=tab_num[wei]; //选择段码 P2=tab_duan[i]; //选择位码 delay(50); //延时一段时间,防止闪烁 } } void keyscan() //键盘扫描函数 { unsigned int x, y, z; x = KEY; //读取按键值 delay(5); //消抖 y = KEY; //再次读取 if(x == y) //如果次读取的值一样,说明按键有效 { switch (x) //判断按下的按键 { case 0x7e:flag=1;z=0;break; // +键 case 0xbd:flag=1;z=1;break; // -键 case 0xeb:flag=1;z=2;break; // *键 case 0xd7:flag=1;z=3;break; // /键 case 0x7d:flag=1;result=0;break; // C键:清零 case 0xbe:flag=1;break; // =键 default: z = x - 48; //0~9数字键 result = result * 10 + z; //计算运算结果 display(result); //实时显示当前结果 } } } void main() { while(1) { keyscan(); if(flag==1) //如果有计算结果,进行运算 { switch(KEY) //判断按下的运算符号 { case 0xeb: //乘法 result=result/z; //防止溢出 display(result*z); break; case 0xd7: //除法,保留后位小数 result=result/z; //防止溢出 printf("result=0x%04x",result); //输出结果,方便调试 if(result%100>=50)result=result/100*100+100; //四舍五入 else result=result/100*100; display(result); break; case 0xbf: //加法 result=result+z; display(result); break; case 0xbd: //减法 result=result-z; display(result); break; } flag=0; //恢复标志位,等待下次输入 } } } ``` 希望我的回答能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ch_champion

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值