Swift - Konversi ke nilai absolut

191

apakah ada cara untuk mendapatkan nilai absolut dari integer?
sebagai contoh

-8  
to  
 8

Saya sudah mencoba menggunakan UInt () dengan asumsi itu akan mengkonversi Int ke nilai yang tidak ditandatangani tetapi tidak berhasil.

Niko Adrianus Yuwono
sumber
8
pemain / konversi seharusnya tidak pernah digunakan untuk mengubah nilai
Bryan Chen

Jawaban:

414

Fungsi standar abs()berfungsi dengan baik di sini:

let c = -8
print(abs(c))
// 8
BS
sumber
Info bagus! Terima kasih! Saya akan menerima jawabannya setelah 10 menit :)
Niko Adrianus Yuwono
Apa yang perlu diimpor untuk menggunakan abs ()?
Jarrod Smith
3
@JarrodSmith: import Foundation
Adrian
3
Anda dapat mengimpor Darwin atau Foundation
YYamil
Bukankah Darwin bagian dari Yayasan?
Marin
38

Dengan Swift 5, Anda dapat menggunakan salah satu dari dua cara berikut untuk mengkonversi bilangan bulat ke nilai absolutnya.


# 1. Dapatkan nilai absolut dari Intdari magnitudeproperti

Intmemiliki magnitudeproperti. magnitudememiliki deklarasi berikut:

var magnitude: UInt { get }

Untuk nilai numerik apa pun x, x.magnitudeadalah nilai absolut dari x.

Cuplikan kode berikut ini menunjukkan cara menggunakan magnitudeproperti untuk mendapatkan nilai absolut pada Intinstance:

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

# 2. Dapatkan nilai absolut dari Intdari abs(_:)metode

Swift memiliki fungsi numerik global yang disebut abs(_:)metode. abs(_:)memiliki deklarasi berikut:

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

Mengembalikan nilai absolut dari angka yang diberikan.

Cuplikan kode berikut ini menunjukkan cara menggunakan abs(_:)fungsi global untuk mendapatkan nilai absolut pada Intinstance:

let value = -5
print(abs(value)) // prints: 5
Imanou Petit
sumber
print (abs (Int.min)) tidak akan berfungsi. Apakah ada solusi untuk Swift 3? Saya belum memperbarui proyek saya.
bibscy
3
Kesempatan yang terlewatkan untuk mengatakan "dapatkan nilai absolut dengan sikap Int "
LinusGeffarth
1
@bibscy Lihat penjelasan Apple untuk memahami mengapa abs(Int8.min)tidak bisa bekerja dan karenanya membuat kesalahan overflow.
Imanou Petit
8

Jika Anda ingin memaksa nomor untuk berubah atau tetap positif.
Inilah caranya:

abs() for int
fabs() for double
fabsf() for float
Sourabh Kumbhar
sumber
fabs sudah usang
Chewie The Chorkie
2

Jika Anda ingin mendapatkan nilai absolut dari double atau Int, gunakan fabsfunc:

var c = -12.09
print(fabs(c)) // 12.09
c = -6
print(fabs(c)) // 6
Hamed
sumber
Ya, Anda benar, tetapi fokus saya adalah pada fabs, permisi
Hamed