四捨五入
四捨五入
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 ); /*処理を行った桁を元に戻す*/ }