Convertir a valor absoluto en Objective-C

187

¿Cómo convierto un número negativo en un valor absoluto en Objective-C?

es decir

-10

se convierte

10?

conservador rojo
fuente
3
@SalvadorDali: No hay nada malo con SO; la pregunta no tomó esfuerzo y no sigue las pautas de SO, mientras que la respuesta es profunda y correcta.
Josue Espinosa

Respuestas:

458

Dependiendo del tipo de la variable, uno de abs(int), labs(long), llabs(long long), imaxabs(intmax_t), fabsf(float), fabs(double), o fabsl(long double).

Esas funciones forman parte de la biblioteca estándar de C, por lo que están presentes tanto en Objective-C como en C simple (y generalmente también están disponibles en los programas de C ++).

(Por desgracia, no hay habs(short)función. O scabs(signed char)para el caso ...)


Los encabezados Objective-C de Apple y GNU también incluyen una ABS()macro que es independiente del tipo. ABS()Sin embargo, no recomiendo usarlo ya que no se garantiza que sea seguro para los efectos secundarios. Por ejemplo, ABS(a++)tendrá un resultado indefinido.


Si está utilizando C ++ u Objective-C ++, puede incorporar el <cmath>encabezado y el uso std::abs(), que está diseñado para todos los tipos enteros estándar y de punto flotante.

Jonathan Grynspan
fuente
33
O puede usar la macro ABS, que funciona en cualquier tipo de número.
ughoavgfhw
1
Sin embargo, @ugsomethingsomething ABS()no es seguro para los efectos secundarios en todos los compiladores, por lo que no recomiendo usarlo.
Jonathan Grynspan
En realidad es: fabsf (doble) fabs (flotante)
Alex
@ Alex no, estas son las definiciones en matemáticas.h:extern float fabsf(float); extern double fabs(double);
Gobe
3

Puede usar esta función para obtener el valor absoluto:

+(NSNumber *)absoluteValue:(NSNumber *)input {
  return [NSNumber numberWithDouble:fabs([input doubleValue])];
}
da Rocha Pires
fuente