Я сделал этот метод
+ (CGFloat) round: (CGFloat)f {
int a = f;
CGFloat b = a;
return b;
}
Это работает как ожидалось, но это только округляет в меньшую сторону. И если это - отрицательное число, это все еще округляет в меньшую сторону.
Это было просто быстрым методом, который я сделал, не очень важно, чтобы это округлилось правильно, я просто добрался вокруг значений X и Y камеры для моей игры.
Этот метод хорошо? Это быстро? Или есть ли лучшее решение?
Уже есть стандартные функции с поведениями, которые могут вам понадобиться в
, например: floorf
, ceilf
,
roundf
, rintf
и nearintf
(lasf 'f' означает «плавающую» версию, версии без него - «двойные» версии).
Стандартные методы лучше использовать не только потому, что они стандартные, но и потому, что они лучше работают в крайних случаях.
Обновление 2013 (jessedc)
iOS больше не 32-разрядная. Есть ряд других ответов на этот вопрос, которые сейчас более актуальны.
В большинстве ответов упоминается импорт tgmath.h
CGFloat
определяется типом либо double
, либо float
, поэтому вы можете округлить их, как любой другой вещественный тип:
CGFloat round(CGFloat aFloat)
{
return (int)(aFloat + 0.5);
}
Примечание что, хотя это работает с достаточно маленькими числами с плавающей запятой, чтобы переносить дробь, это может вести себя странно с большими значениями.
Вы изобретаете колесо - и это вопрос C, а не Цель C. Просто используйте стандартную функцию C round ().