四捨五入

四捨五入

 arduinoには、四捨五入の関数がありません。そこで30年ほども昔、basicをやっていた人から、「0.5を足して切り捨てればいいんで,round関数なんて使わなくてもできるんだ」という話を聞いて感心したのを思い出して、四捨五入の関数を書いていました。
 ところが、温度計をつないでいないときに出るエラー数値が、-127なのに、関数を通すと、-126.9という変な数字になってしまいます。
 「もともと、-126.9なんて数字はないのに、どこから126なんていう数字が出てくるんだろう」と情けないやら、腹が立つやら。
 でもこれは、原因が分かってみれば当たり前でした。
   -127+0.05=-169.95
 これを小数第1位までで切り捨てるので、-169.9がでてくるのでした。
 つまり、数値がマイナスの時には、-0.5してやらないといけなかったわけでした。

サンプルコード

  /*四捨五入(10のn乗の位に処理)*/
float  round1(float  d,  int  n){
    double  dst;
    d  =  d  *  pow(10,  -n  );    /*四捨五入して残す桁を1の位にする*/
    if(d>=0){
      dst  =  (double)(int)(d  +  0.5);
    }else{        //  マイナスの時は絶対値にマイナスを付ける
            dst  =  (double)(int)(d  -  0.5);
    }
    return    dst  *  pow(10,  n  );    /*処理を行った桁を元に戻す*/
}
タイトルとURLをコピーしました