Sebelum saya memperbarui xCode 6, saya tidak memiliki masalah dalam mentransmisikan dobel ke string tetapi sekarang memberi saya kesalahan
var a: Double = 1.5
var b: String = String(a)
Ini memberi saya pesan kesalahan "double is not convertible to string". Apakah ada cara lain untuk melakukannya?
var b = "\(a)"
Jawaban:
Itu tidak mentransmisikan, itu membuat string dari nilai dengan format.
Dengan format yang berbeda:
Anda juga dapat menghilangkan
format
properti jika tidak diperlukan pemformatan.sumber
format:"%.1f" = 1 digit // 1.5
;format:"%.5f" = 5 digits // 1.50000
String(yourDouble)
.perbarui Xcode 7.1 • Swift 2.1:
Sekarang Double juga dapat diubah menjadi String sehingga Anda dapat menggunakannya sesuai keinginan:
Swift 3 atau yang lebih baru dapat kita perpanjang
LosslessStringConvertible
dan membuatnya menjadi generikXcode 11.3 • Swift 5.1 atau lebih baru
Untuk sejumlah digit pecahan yang tetap, kami dapat memperluas
FloatingPoint
protokol:Jika Anda membutuhkan lebih banyak kontrol atas format angka Anda (digit pecahan minimum dan maksimum dan mode pembulatan) Anda dapat menggunakan NumberFormatter:
sumber
String(format: "%.\(digits)f", self as! CVarArg)
denganString(format: "%.*f", digits, self as! CVarArg)
Selain jawaban @Zaph, Anda dapat membuat
extension:
Pemakaian:
sumber
a.toString()
dilihat oleh developer lain pasti ada momen WTF.myToString()
untuk memastikan bahwa definisi kustomnya. Tetapi seperti dalam bahasa lain, pembuatan prototipe mengarah pada menghindari duplikasi kode dan pemeliharaan yang baik.println("output: \(a.toString())")
danprintln("output: \(a)")
. Opsi kedua tidak menyebabkan kesalahan kompilasi. Apakah opsi ini praktik yang buruk?yourDouble?.toString() ?? ""
Swift 3+: Coba baris kode ini
sumber
untuk membuat apapun menjadi string dengan cepat kecuali mungkin nilai enum cukup lakukan apa yang Anda lakukan di metode println ()
sebagai contoh:
sumber
Swift 4 : Gunakan kode berikut
sumber
Fungsi ini memungkinkan Anda menentukan jumlah tempat desimal yang akan ditampilkan:
Pemakaian:
sumber
String(format:"%."+numberOfDecimalPlaces.description+"f", number)
denganString(format:"%.*f", numberOfDecimalPlaces, number)
Ada banyak jawaban di sini yang menyarankan berbagai teknik. Namun saat menyajikan angka di UI, Anda selalu ingin menggunakan a
NumberFormatter
agar hasilnya diformat dengan benar, dibulatkan, dan dilokalkan:Jika Anda ingin jumlah tempat desimal tetap, misalnya untuk nilai mata uang
Tapi keindahan dari pendekatan ini, adalah bahwa itu akan dilokalkan dengan benar, menghasilkan di
10,000.50
AS tetapi10.000,50
di Jerman. Lokal yang berbeda memiliki format pilihan yang berbeda untuk angka, dan kita harus membiarkanNumberFormatter
menggunakan format yang disukai oleh pengguna akhir saat menyajikan nilai numerik dalam UI.Tak perlu dikatakan, walaupun
NumberFormatter
penting saat menyiapkan representasi string dalam UI, itu tidak boleh digunakan jika menulis nilai numerik sebagai string untuk penyimpanan persisten, antarmuka dengan layanan web, dll.sumber
Dalam 3 cepat:
sumber
Di swift 3 itu sederhana seperti yang diberikan di bawah ini
sumber
"Optional(6.1696108999999995)"
untuk saya.Ini berhasil untuk saya. Anda mungkin bisa mencobanya
sumber
Di Swift 4 jika Anda ingin memodifikasi dan menggunakan Double di UI sebagai "String" textLabel, Anda dapat menambahkan ini di akhir file:
}
Dan gunakan seperti ini jika Anda ingin memilikinya dalam label teks:
Atau cetak sebagai Int:
sumber
Saya lebih suka pendekatan NSNumber dan NumberFormatter (di mana perlu), juga u dapat menggunakan ekstensi untuk menghindari kode kembung
Anda juga bisa membutuhkan pendekatan terbalik
sumber
LossLessStringConvertible
protokol perluasan yang lebih umum daripada memperpanjang Doubleextension LosslessStringConvertible { var string: String { return .init(self) } }
Cepat 5 : Gunakan kode berikut
sumber
String(format: "%.\(points)f", self)
denganString(format: "%.*f", points, self)