上一篇博客写到 华摄氏度和摄氏度的相互转换,有个细节要注意下,嘻嘻,细节决定成败。由于是无符号整型的运算,这里涉及到的小数点的处理,即四舍五入的处理,不然,小数部分就被直接去掉了,如果结果是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的运算