华摄氏度和摄氏度的转换小数点处理 单片机


上一篇博客写到 华摄氏度和摄氏度的相互转换,有个细节要注意下,嘻嘻,细节决定成败。由于是无符号整型的运算,这里涉及到的小数点的处理,即四舍五入的处理,不然,小数部分就被直接去掉了,如果结果是65.8,当然,你要的结果是66,而不是65,对吧?具体为如果CelEquVal  * 9 / 5 + 32 运算后的小数大于等于0.5 ,预算后的结果应该再加1,才更接近运算值。我是这么处理的,现将被除数放大10倍,再进行运算,这样,就可以将运算后10的余数和5比较,就能得到是否加1.

判断小数点的运算

#define CalVal(CelEquVal)  (unsigned int ) (CelEquVal* 9 *10/ 5 ) %10//计算华摄氏度的小数 
#defineFahVal(FahEquVal )  (unsigned int ) ((FahEquVal - 32) * 5 *10/ 9)%10//计算摄氏度的小数 

具体应用:
//摄氏度转成华氏度:
if(CalVal(CelEquVal ) >=5 )
{
 FahEquVal  = CelToFahAdd(CelEquVal);//小数点大于等于0.5的运算
}
else
{
 FahEquVal  = CelToFah(CelEquVal);//小数点小于0.5的运算
}

华氏度转成摄氏度:
if(FahVal(FahEquVal ) >=5 )
{
CelEquVal=CelToFahAdd(FahEquVal);//小数点大于等于0.5的运算
}
else
{
CelEquVal=CelToFah(FahEquVal);//小数点小于0.5的运算
}

上篇博客的 华摄氏度和摄氏度的转换 公式优化:
摄氏度转成华氏度:
#define CelToFah(CelEquVal)  (unsigned int )(CelEquVal  * 9 / 5 + 32)//小数点小于0.5的运算
#define CelToFahAdd (CelEquVal) (unsigned int )((CelEquVal  * 9 / 5 + 32)+1)//小数点大于等于0.5的运算
华氏度转成摄氏度:
#define  FahToCel(FahEquVal)  (unsigned int)((FahEquVal - 32) * 5 / 9))//小数点小于0.5的运算
#define  FahToCelAdd (FahEquVal) (unsigned int)(((FahEquVal - 32) * 5 / 9)+1)//小数点大于等于0.5的运算


  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值