In Objective-C in absoluten Wert konvertieren

187

Wie konvertiere ich eine negative Zahl in Objective-C in einen absoluten Wert?

dh

-10

wird

10?

redconservatory
quelle
3
@SalvadorDali: Es ist nichts falsch mit SO; Die Frage hat keine Mühe gekostet und folgt nicht den SO-Richtlinien, während die Antwort ausführlich und korrekt ist.
Josue Espinosa

Antworten:

458

Je nach Art des variablen, von abs(int), labs(long), llabs(long long), imaxabs(intmax_t), fabsf(float), fabs(double), oderfabsl(long double) .

Diese Funktionen sind alle Teil der C-Standardbibliothek und daher sowohl in Objective-C als auch in C enthalten (und sind im Allgemeinen auch in C ++ - Programmen verfügbar.)

(Leider gibt es keine habs(short)Funktion. Oder scabs(signed char)für diese Angelegenheit ...)


Die Objective-C-Header von Apple und GNU enthalten auch ein ABS()typunabhängiges Makro. Ich empfehle ABS()jedoch nicht, es zu verwenden, da es nicht garantiert nebenwirkungssicher ist. Zum Beispiel ABS(a++)wird ein undefiniertes Ergebnis haben.


Wenn Sie C ++ oder Objective-C ++ verwenden, können Sie den <cmath>Header einbringen und verwenden std::abs(), der für alle Standardtypen für Ganzzahlen und Gleitkommazahlen vorgesehen ist.

Jonathan Grynspan
quelle
33
Oder Sie können das ABS-Makro verwenden, das für jeden Nummerntyp funktioniert.
ughoavgfhw
1
@ugsomethingsomething ABS()ist jedoch nicht bei allen Compilern nebenwirkungssicher , weshalb ich die Verwendung nicht empfehle.
Jonathan Grynspan
Es ist eigentlich: fabsf (doppelt) fabs (float)
Alex
@ Alex nein, das sind die Definitionen in math.h:extern float fabsf(float); extern double fabs(double);
Gobe
3

Mit dieser Funktion können Sie den absoluten Wert ermitteln:

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