Convertir en valeur absolue en Objective-C

187

Comment convertir un nombre négatif en valeur absolue dans Objective-C?

c'est à dire

-dix

devient

dix?

rouge conservatoire
la source
3
@SalvadorDali: Il n'y a rien de mal avec SO; la question n'a pas demandé d'effort et ne suit pas les directives SO, alors que la réponse est approfondie et correcte.
Josue Espinosa

Réponses:

458

En fonction du type de votre variable, l' un abs(int), labs(long), llabs(long long), imaxabs(intmax_t), fabsf(float), fabs(double)ou fabsl(long double).

Ces fonctions font toutes partie de la bibliothèque standard C, et sont donc présentes à la fois en Objective-C et en C brut (et sont généralement disponibles dans les programmes C ++).

(Hélas, il n'y a pas de habs(short)fonction. Ou scabs(signed char)d'ailleurs ...)


Les en-têtes Objective-C d'Apple et de GNU incluent également une ABS()macro qui est indépendante du type. ABS()Cependant, je ne recommande pas l'utilisation car il n'est pas garanti que les effets secondaires soient sûrs. Par exemple, ABS(a++)aura un résultat non défini.


Si vous utilisez C ++ ou Objective-C ++, vous pouvez importer l'en- <cmath>tête et utiliser std::abs(), qui est basé sur un modèle pour tous les types entiers et flottants standard.

Jonathan Grynspan
la source
33
Ou vous pouvez utiliser la macro ABS, qui fonctionne sur n'importe quel type de nombre.
ughoavgfhw
1
@ugsomethingsomething ABS()n'est pas sans danger pour tous les compilateurs, c'est pourquoi je ne recommande pas de l'utiliser.
Jonathan Grynspan
C'est en fait: fabsf (double) fabs (float)
Alex
@Alex non, ce sont les définitions en math.h:extern float fabsf(float); extern double fabs(double);
Gobe
3

Vous pouvez utiliser cette fonction pour obtenir la valeur absolue:

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