今更ながらObjective-Cの整数の割り算の罠にはまる
Object-cを利用したiPhoneアプリの開発において、整数同士の割り算で、今更ながらにはまってしまったので忘れないためにメモ
int maxCount = 25; int line = 2;
という整数が2つあった場合に、
int total = maxCount/line;
で計算した結果の値は、12になってしまう。
たとえば、結果の小数以下を切り上げたい時、「ceil」を利用すればよいはずです。
上記の場合は、25/2=12.5 なので、切り上げて13を解として欲しい時に、
int total = ceil(maxCount/line);
とやると、解は12になってしまいます。
int 同士の割り算は、途中で小数が出ても、あくまで整数でしか解を出さないので、切り下げ扱いになるようです。
実際に、上記の式で解として13が欲しい場合は、一度扱う整数を小数にキャストしてやればいいようです。
int total = ceil((float)maxCount/line);
もしくは
int total = ceil(maxCount/(float)line);
とすれば、正しい値が出てきます。
また、変数同士ではなく、一方の値が数値の場合でも、
int total = ceil(maxCount/2.0);
と、整数値をわざと小数で表記してやれば、同じ結果が出てきます。
iPhoneアプリを何本か作ってきましたが、今更ながらに整数計算のクセにはまってしまいました。