【C,C++】指定桁数で端数処理(切り上げ、切り下げ、四捨五入)
例えば、普段は「123.12345」を小数点第二位で切り上げしたい場合、
double dWk1 = 123.12345; double dWk2 = (double)(int)( ( dWk1 * pow(10.0, 2) ) + 0.9 ) * pow(10.0, -2);
みたいな感じでやってたのだけど、
分かりにくいし、たまに間違えたりするので関数化しようというだけ。
と言ってもやってることは上のロジックと同じことだけど。。。
// 端数処理(切り上げ) double ceil( double dSrc, int iLen ) { double dRet; dRet = dSrc * pow(10.0, iLen); dRet = (double)(int)(dRet + 0.9); return dRet * pow(10.0, -iLen); } // 端数処理(切り下げ) double floor( double dSrc, int iLen ) { double dRet; dRet = dSrc * pow(10.0, iLen); dRet = (double)(int)(dRet); return dRet * pow(10.0, -iLen); } // 端数処理(四捨五入) double round( double dSrc, int iLen ) { double dRet; dRet = dSrc * pow(10.0, iLen); dRet = (double)(int)(dRet + 0.5); return dRet * pow(10.0, -iLen); }
追記
上の関数だと丸め誤差とか考えてないので注意!!
誤差はプロジェクト毎で許容範囲違ったりすると思うので、その範囲値を足すなりした方いいと思われ