俺氏、本を読む

30歳になるまでに本を読んで勉強しようかと。主に啓発、お金についての本を読むつもり。一応プログラマーなのでその辺のことも

【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);
}


追記
上の関数だと丸め誤差とか考えてないので注意!!
誤差はプロジェクト毎で許容範囲違ったりすると思うので、その範囲値を足すなりした方いいと思われ