Converti in valore assoluto in Objective-C


187

Come faccio a convertire un numero negativo in un valore assoluto in Objective-C?

vale a dire

-10

diventa

10?


3
@SalvadorDali: Non c'è niente di sbagliato in SO; la domanda non ha richiesto alcuno sforzo e non segue le linee guida SO, mentre la risposta è approfondita e corretta.
Josue Espinosa,

Risposte:


458

A seconda del tipo della variabile, una delle abs(int), labs(long), llabs(long long), imaxabs(intmax_t), fabsf(float), fabs(double), o fabsl(long double).

Queste funzioni fanno tutte parte della libreria standard C e quindi sono presenti sia in Objective-C che in C semplice (e sono generalmente disponibili anche nei programmi C ++).

(Ahimè, non esiste alcuna habs(short)funzione. O del scabs(signed char)resto ...)


Le intestazioni Objective-C di Apple e GNU includono anche una ABS()macro che è di tipo agnostico. Non è consigliabile utilizzarlo ABS()tuttavia poiché non è garantito che sia sicuro per gli effetti collaterali. Ad esempio, ABS(a++)avrà un risultato indefinito.


Se stai usando C ++ o Objective-C ++, puoi inserire l' <cmath>intestazione e usare std::abs(), che è modellato per tutti i tipi interi e in virgola mobile standard.


33
Oppure potresti usare la macro ABS, che funziona su qualsiasi tipo di numero.
ughoavgfhw,

1
@ugsomethingsqualcosa ABS()non è sicuro per gli effetti collaterali su tutti i compilatori, motivo per cui non consiglio di usarlo.
Jonathan Grynspan,

In realtà è: fabsf (double) fabs (float)
Alex

@Alex no, queste sono le definizioni in math.h:extern float fabsf(float); extern double fabs(double);
Gobe

3

È possibile utilizzare questa funzione per ottenere il valore assoluto:

+(NSNumber *)absoluteValue:(NSNumber *)input {
  return [NSNumber numberWithDouble:fabs([input doubleValue])];
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.