Поскольку Objective-C - это C, а спецификация C гласит:
6.3 Преобразования
6.3.1 Арифметические операнды
6.3.1.4 Действительное и плавающее целое число
1 Когда конечное значение реального плавающего типа преобразуется в целочисленный тип, отличный от _Bool, дробная часть отбрасывается (т. Е. Значение усекается до нуля).Если значение неотъемлемой части не может быть представлено целочисленным типом, поведение не определено.
См. Также определение оператора return
, почему в этом случае применяется арифметическое преобразование:
6.8.6.4 Оператор return
3 Если выполняется оператор return с выражением, значение выражения возвращается вызывающей стороне в качестве значения выражения вызова функции.Если выражение имеет тип, отличный от типа возврата функции, в которой оно появляется, значение преобразуется, как если бы оно было присвоено объекту, имеющему тип возврата функции.
И затемпрочтите 6.5.16.1.3 Простое задание .... вы можете продолжать спускаться по кроличьей норе в спецификации, настолько глубоко, насколько вам нравится.: D
Но ключевой момент в том, что в C значения с плавающей запятой могут быть неявно преобразованы в целые числа, и есть определенный способ преобразования ваших значений.