Ich versuche, Zahlen aus einem UITextField zu konvertieren, von denen ich annehme, dass sie tatsächlich Strings sind, und sie in Float zu konvertieren, damit ich sie multiplizieren kann.
Ich habe zwei UITextfield
s, die wie folgt deklariert sind:
@IBOutlet var wage: UITextField
@IBOutlet var hour: UITextField
Wenn der Benutzer einen UIButton drückt, möchte ich die Löhne berechnen, die der Benutzer verdient, aber ich kann nicht, da ich sie zuerst in Floats konvertieren muss, bevor ich sie verwenden kann.
Ich weiß, wie man sie auf diese Weise in eine ganze Zahl konvertiert:
var wageConversion:Int = 0
wageConversion = wage.text.toInt()!
Ich habe jedoch keine Ahnung, wie ich sie in Floats umwandeln soll.
quelle
NSString
hatfloatValue
Erweiterung aberString
nicht. Fehler erhalten:'String' does not have member named floatValue
let floatValue = (Float)(Wage.text)
... in Swift 2.0Denn in einigen Teilen der Welt wird beispielsweise ein Komma anstelle einer Dezimalstelle verwendet. Es ist am besten, einen NSNumberFormatter zu erstellen, um eine Zeichenfolge in float umzuwandeln.
quelle
Ich konvertiere String auf diese Weise in Float:
quelle
NSString.floatValue
, das einfach zurückgegeben wird,0
wenn etwas nicht stimmt). Beachten Sie, dassNSNumberFormatter
geändert wurdeNumberFormatter
.Aktualisieren
Die akzeptierte Antwort zeigt eine aktuellere Vorgehensweise
Schnell 1
So hat Paul Hegarty 2015 in Stanfords CS193p-Klasse gezeigt:
Sie können sogar eine berechnete Eigenschaft erstellen, um dies nicht jedes Mal tun zu müssen
quelle
Bei Verwendung der akzeptierten Lösung stellte ich fest, dass meine "1.1" (bei Verwendung der .floatValue-Konvertierung) in 1.10000002384186 konvertiert wurde, was nicht das war, was ich wollte. Wenn ich jedoch stattdessen den .doubleValue verwenden würde, würde ich die 1.1 erhalten, die ich wollte.
Anstatt zum Beispiel die akzeptierte Lösung zu verwenden, habe ich stattdessen Folgendes verwendet:
In meinem Fall brauchte ich keine doppelte Genauigkeit, aber die Verwendung von .floatValue brachte mir nicht das richtige Ergebnis.
Ich wollte dies nur zur Diskussion hinzufügen, falls jemand anderes auf dasselbe Problem gestoßen ist.
quelle
Unten erhalten Sie einen optionalen Float, kleben Sie ein! am Ende, wenn Sie wissen, dass es sich um einen Float handelt, oder verwenden Sie if / let.
quelle
Hier ist eine Swift 3-Anpassung der Lösung von Paul Hegarty aus der Antwort von rdprado, wobei einige nach Optionen hinzugefügt wurden (Rückgabe von 0.0, wenn ein Teil des Prozesses fehlschlägt):
Übrigens habe ich Stanfords CS193p-Kurs an der iTunes University besucht, als sie noch Objective-C unterrichtete.
Ich fand, dass Paul Hegarty ein FANTASTISCHER Lehrer ist, und ich kann die Klasse jedem empfehlen, der als iOS-Entwickler in Swift anfängt !!!
quelle
NumberFormatter
, um mit vom Benutzer eingegebenen Gleitkommazahlen umzugehen.quelle
In schneller 4
quelle
quelle
return Float(self)
?Sie haben zwei Optionen, die (nach Ansatz und Ergebnis) sehr ähnlich sind:
quelle
Double()
erstellt ein Double aus einem Int wie folgt:var convertedDouble = Double(someInt)
Beachten Sie, dass dies nur funktioniert, wenn Ihr Text tatsächlich eine Nummer enthält. Da
Wage
es sich um ein Textfeld handelt, kann der Benutzer eingeben, was er möchte, und dies löst einen Laufzeitfehler aus, wenn Sie die Option entfernen, von der die Option zurückgegeben wurdetoInt()
. Sie sollten überprüfen, ob die Konvertierung erfolgreich war, bevor Sie das Unboxing erzwingen.Bearbeiten:
Wenn Sie sicher sind, dass der Text eine Ganzzahl ist, können Sie
text
Folgendes tun (beachten Sie, dass UITextField auch optional ist)):quelle
wageConversionFloat
wird niemals der Float sein, er stürzt direkt ab, wenn die Eingabezeichenfolge eine Art Float ist234.56
. Wie könnte es eine akzeptierte / hochgestufte Lösung sein ...?3
wenn das Textfeld hat3.5
. Dies liegt daran, dass der Text zuerst in a konvertiert wirdInt
und dannInt
in a konvertiert wirdFloat
.Ich habe einen anderen Weg gefunden, einen Eingabewert eines UITextField in einen Float umzuwandeln:
quelle
Sie können verwenden,
Wenn Sie den Gleitkomma auf 2 Dezimalstellen runden möchten:
quelle
So bin ich damit umgegangen. Ich wollte die Brücke nicht "überqueren", da sie ohnehin schnell und schmutzig aus Xcode 6 Beta 5 entfernt wurde:
quelle
toDouble()
, mit "10" zu funktionieren, meine ich, wenn es keine Dezimalstelle gibt. Es wird sowieso abstürzen. Denn in diesem Fall ist die Anzahl 1 und Sie behandeln das nicht. Es wird bei abstürzenelse if comps[0] == "" || comps[1] == ""
. Wie auch immer, Sie sind so ernsthaft in der Bekehrung.Der Vollständigkeit halber handelt es sich hierbei um eine Lösung, bei deren Erweiterung
UITextField
auch ein anderes Gebietsschema berücksichtigt werden kann.Für Swift 3+
quelle
Float?
und ungültige Werte nicht als behandeln0.0
. Lassen Sie den Anrufer so etwas tun, alslet val = field.floatValue ?? 0.0
ob ein bestimmter Fall das schlechte Ergebnis als Null behandeln sollte.Swift 4/5, benutze nur Float (Wert).
Antwort: 123200
quelle
Benutze das:
quelle
Einfacher Weg:
Sie können den gleichen Ansatz für andere Berechnungen verwenden, hoffe diese Hilfe!
quelle
float