แปลงเป็นค่าสัมบูรณ์ใน Objective-C


187

ฉันจะแปลงจำนวนลบให้เป็นค่าสัมบูรณ์ใน Objective-C ได้อย่างไร

กล่าวคือ

-10

กลายเป็น

10?


3
@SalvadorDali: ไม่มีอะไรผิดปกติกับ SO; คำถามไม่ได้ใช้ความพยายามและไม่ปฏิบัติตามแนวทาง SO ในขณะที่คำตอบนั้นอยู่ในระดับลึกและถูกต้อง
Josue Espinosa

คำตอบ:


458

ทั้งนี้ขึ้นอยู่กับชนิดของตัวแปรของคุณหนึ่งในabs(int), labs(long), llabs(long long), imaxabs(intmax_t), fabsf(float), หรือfabs(double)fabsl(long double)

ฟังก์ชั่นเหล่านั้นเป็นส่วนหนึ่งของไลบรารีมาตรฐาน C และมีอยู่ทั้งใน Objective-C และ C ธรรมดา (และโดยทั่วไปจะมีอยู่ในโปรแกรม C ++ ด้วย)

(อนิจจาไม่มีhabs(short)ฟังก์ชั่นหรือscabs(signed char)สำหรับเรื่องนั้น ... )


ส่วนหัวของ Objective-C ของ Apple และ GNU นั้นรวมถึงABS()แมโครซึ่งเป็นผู้ไม่เชื่อเรื่องพระเจ้า ฉันไม่แนะนำให้ใช้ABS()อย่างไรก็ตามไม่รับประกันว่าจะมีผลข้างเคียง - ปลอดภัย ตัวอย่างเช่นABS(a++)จะมีผลลัพธ์ที่ไม่ได้กำหนด


หากคุณใช้ C ++ หรือ Objective-C ++ คุณสามารถนำ<cmath>ส่วนหัวและการใช้งานมาใช้std::abs()ซึ่งจะถูกสร้างด้วยจำนวนเต็มมาตรฐานและชนิดจำนวนเต็มทั้งหมด


33
หรือคุณสามารถใช้มาโคร ABS ซึ่งใช้ได้กับทุกประเภทตัวเลข
ughoavgfhw

1
@ugsomethingsomething ABS()ไม่ได้มีผลข้างเคียงที่ปลอดภัยสำหรับคอมไพเลอร์ทั้งหมดซึ่งเป็นสาเหตุที่ฉันไม่แนะนำให้ใช้
Jonathan Grynspan

เป็นจริง: fabsf (double) fabs (float)
Alex

@Alex no, คำจำกัดความเหล่านี้ใน math.h:extern float fabsf(float); extern double fabs(double);
Gobe

3

คุณสามารถใช้ฟังก์ชันนี้เพื่อรับค่าสัมบูรณ์:

+(NSNumber *)absoluteValue:(NSNumber *)input {
  return [NSNumber numberWithDouble:fabs([input doubleValue])];
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.