Как безопасно преобразовать CGFloat в int?

Мне часто нужно установить пол или потолок от CGFloatдо intдля вычисления индекса массива.

Проблема, которую я постоянно вижу с floorf(theCGFloat)или ceilf(theCGFloat), заключается в том, что могут быть проблемы с неточностями с плавающей запятой.

Так что, если мой CGFloat— это 2.0f, но внутренне он представлен как 1.999999999999fили что-то в этом роде. Я делаю floorfи получаю 1.0f, который снова является числом с плавающей запятой. И все же я должен привести этого зверя к int, что может создать еще одну проблему.

Существует ли наилучшая практика, как установить пол или потолок от floatдо intтаким образом, чтобы что-то вроде 2.0никогда случайно не достигло пола до 1, а что-то вроде 2.0никогда случайно не достигло потолка 2?

18
задан Yamaneko 21 April 2013 в 22:35
поделиться