Saya mencoba mengonversi angka yang diambil dari UITextField, yang saya anggap, sebenarnya adalah Strings, dan mengubahnya menjadi Float, jadi saya bisa mengalikannya.
Saya memiliki dua UITextfield
s yang dinyatakan sebagai berikut:
@IBOutlet var wage: UITextField
@IBOutlet var hour: UITextField
Ketika pengguna menekan tombol UIButton, saya ingin menghitung gaji yang diperoleh pengguna, tetapi saya tidak bisa, karena saya harus mengubahnya menjadi float terlebih dahulu, sebelum saya dapat menggunakannya.
Saya tahu cara mengonversinya menjadi integer dengan melakukan ini:
var wageConversion:Int = 0
wageConversion = wage.text.toInt()!
Namun, saya tidak tahu bagaimana mengubahnya menjadi float.
sumber
NSString
memilikifloatValue
ekstensi tetapiString
tidak. Dapatkan kesalahan:'String' does not have member named floatValue
let floatValue = (Float)(Wage.text)
... Dalam Swift 2.0Karena di beberapa bagian dunia, misalnya, koma digunakan sebagai pengganti desimal. Cara terbaik adalah membuat NSNumberFormatter untuk mengonversi string menjadi float.
sumber
Saya mengonversi String ke Float dengan cara ini:
sumber
NSString.floatValue
, yang hanya mengembalikan0
jika ada yang salah.). Perhatikan bahwaNSNumberFormatter
telah diubahNumberFormatter
.Memperbarui
Jawaban yang diterima menunjukkan cara melakukan yang lebih mutakhir
Cepat 1
Inilah yang ditunjukkan Paul Hegarty di kelas CS193p Stanford pada tahun 2015:
Anda bahkan dapat membuat properti yang dihitung karena tidak harus melakukannya setiap saat
sumber
Dengan menggunakan solusi yang diterima, saya menemukan bahwa "1.1" saya (saat menggunakan konversi .floatValue) akan dikonversi ke 1.10000002384186, yang bukan itu yang saya inginkan. Namun, jika saya menggunakan .doubleValue sebagai gantinya, saya akan mendapatkan 1.1 yang saya inginkan.
Jadi misalnya, alih-alih menggunakan solusi yang diterima, saya menggunakan ini sebagai gantinya:
Dalam kasus saya, saya tidak memerlukan presisi ganda, tetapi menggunakan .floatValue tidak memberi saya hasil yang sesuai.
Hanya ingin menambahkan ini ke diskusi kalau-kalau ada orang lain yang mengalami masalah yang sama.
sumber
Di bawah ini akan memberi Anda Float opsional, tetap a! di akhir jika Anda tahu itu menjadi Float, atau gunakan jika / biarkan.
sumber
Berikut adalah adaptasi Swift 3 dari solusi Paul Hegarty dari jawaban rdprado, dengan beberapa pemeriksaan opsional yang ditambahkan padanya (mengembalikan 0.0 jika ada bagian dari proses yang gagal):
Ngomong-ngomong, saya mengambil kelas CS193p Stanford menggunakan iTunes University saat masih mengajar Objective-C.
Saya menemukan Paul Hegarty sebagai instruktur FANTASTIS, dan saya akan sangat merekomendasikan kelas ini kepada siapa pun yang memulai sebagai pengembang iOS di Swift !!!
sumber
NumberFormatter
untuk menangani pengguna yang memasukkan angka floating point.sumber
Dengan cepat 4
sumber
sumber
return Float(self)
?Anda memiliki dua opsi yang sangat mirip (berdasarkan pendekatan dan hasil):
sumber
Double()
membangun Double dari Int, seperti ini:var convertedDouble = Double(someInt)
Perhatikan bahwa ini hanya akan berfungsi jika teks Anda benar-benar berisi angka. Karena
Wage
merupakan bidang teks, pengguna dapat memasukkan apa pun yang mereka inginkan dan ini akan memicu kesalahan waktu proses saat Anda membuka kotak Opsional yang dikembalikan daritoInt()
. Anda harus memeriksa apakah konversi berhasil sebelum memaksa unboxing.Edit:
Jika Anda yakin teksnya adalah bilangan bulat, Anda dapat melakukan sesuatu seperti ini (perhatikan bahwa
text
di UITextField juga Opsional)):sumber
wageConversionFloat
tidak akan pernah menjadi float, itu crash secara langsung jika string input adalah semacam float234.56
. bagaimana itu bisa menjadi solusi yang diterima / disukai ...?3
jika kolom teks memiliki3.5
. Ini karena teks pertama-tama diubah menjadiInt
, kemudianInt
diubah menjadiFloat
.Saya menemukan cara lain untuk mengambil nilai input dari UITextField dan melemparkannya ke float:
sumber
kamu bisa memakai,
Jika Anda ingin membulatkan pelampung ke 2 tempat desimal:
sumber
Beginilah cara saya mendekatinya. Saya tidak ingin "menyeberangi jembatan", karena itu telah dihapus dari Xcode 6 beta 5, cepat dan kotor:
sumber
toDouble()
fungsi dengan string "10" maksud saya jika tidak ada desimal. Ini akan macet juga. Karena dalam kasus itu hitungannya akan menjadi 1 dan Anda tidak menanganinya. Ini akan crash padaelse if comps[0] == "" || comps[1] == ""
. Bagaimanapun Anda begitu serius dalam pertobatan.Demi kelengkapan, ini adalah solusi yang menggunakan ekstensi
UITextField
yang juga dapat mempertimbangkan lokasi yang berbeda.Untuk Swift 3+
sumber
Float?
dan tidak memperlakukan nilai yang tidak valid sebagai0.0
. Biarkan pemanggil melakukan sesuatu sepertilet val = field.floatValue ?? 0.0
jika kasus tertentu memperlakukan hasil buruk sebagai nol.Swift 4/5, gunakan hanya Float (nilai).
Jawaban: 123200
sumber
Gunakan ini:
sumber
Jalan mudah:
Anda dapat menggunakan pendekatan yang sama untuk perhitungan lain, semoga bantuan ini !!
sumber
float