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


190

Có cách nào để có được giá trị tuyệt đối từ một số nguyên không?
ví dụ

-8  
to  
 8

Tôi đã thử sử dụng UInt () giả sử nó sẽ chuyển đổi giá trị Int thành giá trị không dấu nhưng nó không hoạt động.


8
cast / convert không bao giờ nên được sử dụng để thay đổi giá trị
Bryan Chen

Câu trả lời:


413

Các abs()chức năng tiêu chuẩn hoạt động tuyệt vời ở đây:

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

Người đàn ông thông tin tốt đẹp! Cảm ơn! Tôi sẽ chấp nhận câu trả lời sau 10 phút :)
Niko Adrianus Yuwono

Những gì cần phải được nhập khẩu để sử dụng abs ()?
Jarrod Smith

3
@JarrodSmith: nhập khẩu Foundation
Adrian

3
Bạn có thể nhập Darwin hoặc Foundation
YYamil

Không phải Darwin là một phần của Foundation?
Marin

38

Với Swift 5, bạn có thể sử dụng một trong hai cách sau để chuyển đổi một số nguyên thành giá trị tuyệt đối của nó.


# 1. Nhận giá trị tuyệt đối của một Inttừ magnitudetài sản

Intcó một magnitudetài sản. magnitudecó tuyên bố sau:

var magnitude: UInt { get }

Đối với bất kỳ giá trị số x, x.magnitudelà giá trị tuyệt đối của x.

Đoạn mã sau đây cho thấy cách sử dụng magnitudethuộc tính để có được giá trị tuyệt đối trên một Intthể hiện:

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

# 2. Nhận giá trị tuyệt đối của một Inttừ abs(_:)phương thức

Swift có một hàm số toàn cầu được gọi là abs(_:)phương thức. abs(_:)có tuyên bố sau:

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

Trả về giá trị tuyệt đối của số đã cho.

Đoạn mã sau đây cho thấy cách sử dụng abs(_:)hàm toàn cục để có được giá trị tuyệt đối trên một Intthể hiện:

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

print (abs (Int.min)) sẽ không hoạt động. Có giải pháp nào cho Swift 3 không? Tôi chưa cập nhật dự án của tôi.
bibscy

3
Bỏ lỡ cơ hội để nói "có được giá trị tuyệt đối trên lập trường Int "
LinusGeffarth 16/03/18

1
@bibscy Xem giải thích của Apple để hiểu lý do tại sao abs(Int8.min)không thể hoạt động và do đó tạo ra lỗi tràn.
Imanou Petit

7

Nếu bạn muốn buộc một số thay đổi hoặc giữ cho nó tích cực.
Đây là cách:

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

fabs bị phản đối
Chewie Các Chorkie

2

Nếu bạn muốn nhận giá trị tuyệt đối từ gấp đôi hoặc Int, hãy sử dụng fabsfunc:

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

Vâng, bạn đúng, nhưng tôi tập trung vào fabs, xin lỗi
Hamed
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.