floatやdoubleの値をintへと変換すると小数点以下は切り捨てられる。小数点以下を四捨五入したいときには0.5を足してから変換すれば良い。
float f = 123.456f; f += 0.5f; int i = (int)f; cout << i << endl; f = 456.789f; f += 0.5f; i = (int)f; cout << i << endl; 実行結果 123 457
四捨五入する前の値が負の場合にはどうするか。そもそも負の数の四捨五入でどう定義されているのだろう。ネットで検索してみたら、いろいろとあって結局分からなかった。
四捨五入は値を近いほうにするという考え方だから、-123.456なら-123で、-456.789なら-457か。と考えると0.5を足すのではなく引いてやらないといけないか。