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


187

Як перетворити від'ємне число в абсолютне значення в Objective-C?

тобто

-10

стає

10?


3
@SalvadorDali: З SO немає нічого поганого; питання не вимагає зусиль і не дотримується вказівок SO, тоді як відповідь є глибокою та правильною.
Джозе Еспіноса

Відповіді:


458

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

Ці функції є частиною стандартної бібліотеки С, і тому вони присутні як в Objective-C, так і в простому C (і зазвичай вони також доступні в програмах C ++.)

(На жаль, habs(short)функцій немає . Або scabs(signed char)з цього приводу ...)


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


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


33
Або ви можете використовувати макрос ABS, який працює на будь-якому типі чисел.
ughoavgfhw

1
@ugsomethingsomething ABS()не є безпечним для всіх компіляторів, тому я не рекомендую його використовувати.
Джонатан Грінспан

Це насправді: fabsf (подвійний) fabs (float)
Алекс

@ Алекс ні, це визначення з математики.h:extern float fabsf(float); extern double fabs(double);
Gobe

3

Ви можете використовувати цю функцію для отримання абсолютного значення:

+(NSNumber *)absoluteValue:(NSNumber *)input {
  return [NSNumber numberWithDouble:fabs([input doubleValue])];
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.