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


191

มีวิธีการรับค่าสัมบูรณ์จากจำนวนเต็ม?
ตัวอย่างเช่น

-8  
to  
 8

ฉันได้ลองใช้ UInt () โดยสมมติว่ามันจะแปลงค่า Int ให้เป็นค่าที่ไม่ได้ลงนาม แต่ไม่ได้ผล


8
แปลง / แปลงไม่ควรใช้เปลี่ยนค่า
Bryan Chen

คำตอบ:


414

abs()ฟังก์ชั่นมาตรฐานใช้งานได้ดีที่นี่:

let c = -8
print(abs(c))
// 8

คนดีข้อมูล! ขอบคุณ! ฉันจะยอมรับคำตอบหลังจาก 10 นาที :)
Niko Adrianus Yuwono

จำเป็นต้องนำเข้าอะไรเพื่อใช้ abs ()
Jarrod Smith

3
@JarrodSmith: มูลนิธินำเข้า
Adrian

3
คุณสามารถนำเข้าดาร์วินหรือมูลนิธิ
YYamil

ไม่ใช่ดาร์วินเป็นส่วนหนึ่งของมูลนิธิใช่หรือไม่
Marin

38

ด้วย Swift 5 คุณสามารถใช้หนึ่งในสองวิธีต่อไปนี้เพื่อแปลงจำนวนเต็มเป็นค่าสัมบูรณ์


# 1 รับค่าสัมบูรณ์Intจากmagnitudeคุณสมบัติ

Intมีmagnitudeคุณสมบัติ magnitudeมีการประกาศดังต่อไปนี้:

var magnitude: UInt { get }

สำหรับค่าตัวเลขใด ๆx, เป็นค่าสัมบูรณ์ของx.magnitudex

ข้อมูลโค้ดต่อไปนี้แสดงวิธีใช้magnitudeคุณสมบัติเพื่อรับค่าสัมบูรณ์ในIntอินสแตนซ์:

let value = -5
print(value.magnitude) // prints: 5

# 2 รับค่าสัมบูรณ์ของเมธอดIntfromabs(_:)

Swift มีฟังก์ชั่นตัวเลขทั่วโลกที่เรียกว่าabs(_:)วิธีการ abs(_:)มีการประกาศดังต่อไปนี้:

func abs<T>(_ x: T) -> T where T : Comparable, T : SignedNumeric

ส่งคืนค่าสัมบูรณ์ของตัวเลขที่กำหนด

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการใช้abs(_:)ฟังก์ชั่นทั่วโลกเพื่อรับค่าสัมบูรณ์ในIntอินสแตนซ์:

let value = -5
print(abs(value)) // prints: 5

พิมพ์ (abs (Int.min)) จะไม่ทำงาน มีวิธีแก้ปัญหาสำหรับ Swift 3 หรือไม่? ฉันยังไม่ได้อัพเดตโครงการ
bibscy

3
พลาดโอกาสในการพูดว่า"รับค่าสัมบูรณ์จากจุดยืนInt "
LinusGeffarth

1
@bibscy ดูคำอธิบายของ Appleเพื่อทำความเข้าใจว่าทำไมจึงabs(Int8.min)ไม่สามารถทำงานได้
Imanou Petit

8

หากคุณต้องการบังคับให้จำนวนเปลี่ยนหรือทำให้เป็นบวก
นี่คือวิธี:

abs() for int
fabs() for double
fabsf() for float

fabs เลิกใช้แล้ว
Chewie The Chorkie

2

หากคุณต้องการได้รับค่าสัมบูรณ์จาก double หรือ Int ใช้fabsfunc:

var c = -12.09
print(fabs(c)) // 12.09
c = -6
print(fabs(c)) // 6

ใช่คุณพูดถูก แต่ฉันมุ่งความสนใจไปfabsขอโทษด้วย
Hamed
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.