В C (и, следовательно, также в Objective-C) выражения почти всегда оцениваются без учета контекста, в котором они появляются.
Выражение 1 / 120
является делением двух int
операндов, так что это дает int
результат.Целочисленное деление усекает, поэтому 1 / 120
дает 0
.Тот факт, что результат используется для инициализации объекта float
, не меняет способ оценки 1 / 120
.
Иногда это может быть нелогичным, особенно если вы привыкли к тому, как калькуляторы обычно используютсяработать (они обычно хранят все результаты с плавающей запятой).
Как и в других ответах, чтобы получить результат, близкий к 0,00833 (что не может быть точно представлено, кстати), вам нужно сделатьделение с плавающей запятой, а не целочисленное деление, путем создания одного или обоих операндов с плавающей запятой.Если один операнд является плавающей точкой, а другой - целым числом, целочисленный операнд сначала преобразуется в число с плавающей точкой;нет прямой операции с плавающей запятой целочисленным делением.
Обратите внимание, что, как говорится в комментарии @ 0x8badf00d, результат должен быть 0
.Что-то еще должно быть не так, чтобы напечатанный результат был inf
.Если вы покажете нам больше кода, предпочтительно небольшую законченную программу, мы поможем разобраться в этом.
(Существуют языки, в которых целочисленное деление дает результат с плавающей запятой. Даже в этих языках оценка нене обязательно зависит от контекста. Python версии 3 является одним из таких языков; C, Objective-C и Python версии 2 не являются.)