Chuyển đổi thành giá trị tuyệt đối trong Objective-C


187

Làm cách nào để chuyển đổi số âm thành giá trị tuyệt đối trong Objective-C?

I E

-10

trở thành

10?


3
@SalvadorDali: Không có gì sai với SO; câu hỏi không nỗ lực và không tuân theo các hướng dẫn của SO, trong khi câu trả lời là sâu sắc và chính xác.
Josue Espinosa

Câu trả lời:


458

Tùy thuộc vào loại biến của bạn, một trong những abs(int), labs(long), llabs(long long), imaxabs(intmax_t), fabsf(float), fabs(double), hoặc fabsl(long double).

Các hàm này đều là một phần của thư viện chuẩn C và do đó có mặt cả trong Objective-C và C đơn giản (và thường có sẵn trong các chương trình C ++.)

(Than ôi, không có habs(short)chức năng. Hoặc scabs(signed char)cho vấn đề đó ...)


Các tiêu đề Objective-C của Apple và GNU cũng bao gồm một ABS()macro không xác định kiểu. Tôi không khuyên bạn nên sử dụng ABS()tuy nhiên nó không được đảm bảo là an toàn cho tác dụng phụ. Ví dụ, ABS(a++)sẽ có một kết quả không xác định.


Nếu bạn đang sử dụng C ++ hoặc Objective-C ++, bạn có thể đưa vào <cmath>tiêu đề và sử dụng std::abs(), được tạo khuôn mẫu cho tất cả các loại số nguyên và dấu phẩy động tiêu chuẩn.


33
Hoặc bạn có thể sử dụng macro ABS, hoạt động trên bất kỳ loại số nào.
ughoavgfhw

1
@ugsomethings Something ABS()không có tác dụng phụ an toàn cho tất cả các trình biên dịch, tuy nhiên, đó là lý do tại sao tôi không khuyên bạn nên sử dụng nó.
Jonathan Grynspan

Nó thực sự là: fabsf (double) fabs (float)
Alex

@Alex không, đây là những định nghĩa trong math.h:extern float fabsf(float); extern double fabs(double);
Gobe

3

Bạn có thể sử dụng chức năng này để có được giá trị tuyệt đối:

+(NSNumber *)absoluteValue:(NSNumber *)input {
  return [NSNumber numberWithDouble:fabs([input doubleValue])];
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.