Konversikan ke nilai absolut di Objective-C

187

Bagaimana cara mengonversi angka negatif ke nilai absolut di Objective-C?

yaitu

-10

menjadi

10?

redconservatory
sumber
3
@SalvadorDali: Tidak ada yang salah dengan SO; pertanyaannya tidak membutuhkan usaha dan tidak mengikuti pedoman SO, sementara jawabannya mendalam dan benar.
Josue Espinosa

Jawaban:

458

Tergantung pada jenis variabel Anda, salah abs(int), labs(long), llabs(long long), imaxabs(intmax_t), fabsf(float), fabs(double), atau fabsl(long double).

Fungsi-fungsi itu semua adalah bagian dari pustaka standar C, dan juga hadir baik di Objective-C dan plain C (dan umumnya juga tersedia di program C ++.)

(Sayangnya, tidak ada habs(short)fungsi. Atau scabs(signed char)dalam hal ini ...)


Header Objective-C Apple dan GNU juga menyertakan ABS()makro yang bertipe agnostik. Namun saya tidak menyarankan penggunaan ABS()karena tidak dijamin aman efek samping. Misalnya, ABS(a++)akan memiliki hasil yang tidak ditentukan.


Jika Anda menggunakan C ++ atau Objective-C ++, Anda bisa memasukkan <cmath>header dan gunakan std::abs(), yang templated untuk semua tipe integer standar dan floating-point.

Jonathan Grynspan
sumber
33
Atau Anda bisa menggunakan makro ABS, yang berfungsi pada semua jenis nomor.
ughoavgfhw
1
@ugsomethingsomething ABS()tidak efek samping yang aman pada semua kompiler, karena itu saya tidak menyarankan untuk menggunakannya.
Jonathan Grynspan
Ini sebenarnya: fabsf (dobel) fabs (float)
Alex
@Alex tidak, ini adalah definisi dalam math.h:extern float fabsf(float); extern double fabs(double);
Gobe
3

Anda dapat menggunakan fungsi ini untuk mendapatkan nilai absolut:

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