GADGET FACTORY 雑記帳

iPhone アプリ / Flash コンテンツ /Adobe AIR などを開発していて気づいたことや備忘録、TIPS、HACKなど

今更ながら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アプリを何本か作ってきましたが、今更ながらに整数計算のクセにはまってしまいました。