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?


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.


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])];
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.