Преобразовать в абсолютное значение в Objective-C

187

Как преобразовать отрицательное число в абсолютное значение в Objective-C?

т.е.

-10

становится

10?

redconservatory
источник
3
@SalvadorDali: С SO все в порядке; вопрос не потребовал усилий и не соответствует рекомендациям SO, в то время как ответ является всесторонним и правильным.
Хосе Эспиноса

Ответы:

458

В зависимости от типа переменной, один из abs(int), labs(long), llabs(long long), imaxabs(intmax_t), fabsf(float), fabs(double), или fabsl(long double).

Все эти функции являются частью стандартной библиотеки C и присутствуют как в Objective-C, так и в простом C (и, как правило, также доступны в программах на C ++.)

(Увы, нет никакой habs(short)функции. Или scabs(signed char)в этом отношении ...)


Заголовки Objective-C Apple и GNU также включают ABS()макрос, который не зависит от типа. Однако я не рекомендую использовать ABS()его, так как он не гарантирует безопасность от побочных эффектов. Например, ABS(a++)будет иметь неопределенный результат.


Если вы используете C ++ или Objective-C ++, вы можете ввести <cmath>заголовок и использовать его std::abs(), который шаблонируется для всех стандартных целочисленных типов и типов с плавающей точкой.

Джонатан Гринспан
источник
33
Или вы можете использовать макрос ABS, который работает на любом числовом типе.
ughoavgfhw
1
@ugsomethingsomething ABS()не безопасен для всех компиляторов, поэтому я не рекомендую его использовать.
Джонатан Гринспан
Это на самом деле: fabsf (double) fabs (float)
Алекс
extern float fabsf(float); extern double fabs(double);
Гобе
3

Вы можете использовать эту функцию, чтобы получить абсолютное значение:

+(NSNumber *)absoluteValue:(NSNumber *)input {
  return [NSNumber numberWithDouble:fabs([input doubleValue])];
}
да Роча Пирес
источник