Swift 2.0+
Maintenant, avec Swift 2.0, vous pouvez simplement utiliser Float(Wage.text)
qui renvoie un Float?
type. Plus clair que la solution ci-dessous qui revient juste 0
.
Si vous voulez une 0
valeur pour un invalide Float
pour une raison quelconque, vous pouvez utiliser Float(Wage.text) ?? 0
qui retournera 0
si ce n'est pas un valide Float
.
Ancienne solution
La meilleure façon de gérer cela est la diffusion directe:
var WageConversion = (Wage.text as NSString).floatValue
J'ai en fait créé un extension
pour mieux utiliser cela aussi:
extension String {
var floatValue: Float {
return (self as NSString).floatValue
}
}
Maintenant, vous pouvez simplement appeler var WageConversion = Wage.text.floatValue
et permettre à l'extension de gérer le pont pour vous!
C'est une bonne implémentation car elle peut gérer les flottants réels (entrée avec .
) et aidera également à empêcher l'utilisateur de copier du texte dans votre champ de saisie ( 12p.34
ou même 12.12.41
).
Évidemment, si Apple ajoute un floatValue
à Swift, cela lèvera une exception, mais cela peut être agréable en attendant. S'ils l'ajoutent plus tard, tout ce que vous avez à faire pour modifier votre code est de supprimer l'extension et tout fonctionnera de manière transparente, car vous appellerez déjà .floatValue
!
En outre, les variables et les constantes doivent commencer par une minuscule (y compris IBOutlets
)
NSString
a unefloatValue
extension maisString
pas. Obtenir l'erreur:'String' does not have member named floatValue
let floatValue = (Float)(Wage.text)
... dans Swift 2.0Parce que dans certaines régions du monde, par exemple, une virgule est utilisée à la place d'un décimal. Il est préférable de créer un NSNumberFormatter pour convertir une chaîne en float.
la source
Je convertis String en Float de cette manière:
la source
NSString.floatValue
, qui revient simplement0
si quelque chose ne va pas.). Notez que cela aNSNumberFormatter
été changéNumberFormatter
.Mettre à jour
La réponse acceptée montre une façon de faire plus à jour
Swift 1
Voici comment Paul Hegarty l'a montré dans la classe CS193p de Stanford en 2015:
Vous pouvez même créer une propriété calculée pour ne pas avoir à faire cela à chaque fois
la source
En utilisant la solution acceptée, j'ai découvert que mon "1.1" (lors de l'utilisation de la conversion .floatValue) serait converti en 1.10000002384186, ce qui n'était pas ce que je voulais. Cependant, si j'utilisais le .doubleValue à la place, j'obtiendrais le 1.1 que je voulais.
Ainsi, par exemple, au lieu d'utiliser la solution acceptée, j'ai utilisé ceci à la place:
Dans mon cas, je n'avais pas besoin de double précision, mais l'utilisation de .floatValue ne me donnait pas le résultat correct.
Je voulais juste ajouter ceci à la discussion au cas où quelqu'un d'autre aurait rencontré le même problème.
la source
Ci-dessous vous donnera un flotteur en option, collez un! à la fin si vous savez qu'il s'agit d'un Float, ou utilisez if / let.
la source
Voici une adaptation Swift 3 de la solution de Paul Hegarty à partir de la réponse de rdprado, avec quelques vérifications d'options ajoutées (renvoyant 0.0 si une partie du processus échoue):
Au fait, j'ai suivi le cours CS193p de Stanford en utilisant iTunes University alors qu'il enseignait encore Objective-C.
J'ai trouvé que Paul Hegarty était un instructeur FANTASTIQUE, et je recommanderais vivement le cours à tous ceux qui débutent en tant que développeur iOS dans Swift !!!
la source
NumberFormatter
pour traiter les nombres à virgule flottante saisis par l'utilisateur.la source
Dans Swift 4
la source
la source
return Float(self)
?Vous avez deux options assez similaires (par l'approche et le résultat):
la source
Double()
construit un Double à partir d'un Int, comme ceci:var convertedDouble = Double(someInt)
Notez que cela ne fonctionnera que si votre texte contient réellement un nombre. Puisqu'il
Wage
s'agit d'un champ de texte, l'utilisateur peut entrer ce qu'il veut et cela déclenchera une erreur d'exécution lorsque vous allez déballer l'Optionnel renvoyétoInt()
. Vous devez vérifier que la conversion a réussi avant de forcer le déballage.Éditer:
Si vous êtes sûr que le texte sera un entier, vous pouvez faire quelque chose comme ceci (notez que
text
sur UITextField est également facultatif)):la source
wageConversionFloat
ne sera jamais le float, il plante directement si la chaîne d'entrée est une sorte de float comme234.56
. comment pourrait-elle être une solution acceptée / votée ...?3
si le champ de texte a3.5
. En effet, le texte est d'abord converti en unInt
, puis leInt
est converti en unFloat
.J'ai trouvé un autre moyen de prendre une valeur d'entrée d'un UITextField et de la convertir en flottant:
la source
vous pouvez utiliser,
Si vous voulez arrondir le flotteur à 2 décimales:
la source
C'est ainsi que je l'ai abordé. Je ne voulais pas "traverser le pont", car il a de toute façon été supprimé de Xcode 6 beta 5, rapide et sale:
la source
toDouble()
fonction avec la chaîne "10", je veux dire s'il n'y a pas de décimal. Il plantera de toute façon. Parce que dans ce cas, le nombre sera de 1 et vous ne gérez pas cela. Il plantera àelse if comps[0] == "" || comps[1] == ""
. Quoi qu'il en soit, vous êtes si sérieux dans la conversion.Par souci d'exhaustivité, il s'agit d'une solution utilisant une extension de
UITextField
laquelle peut également prendre en compte une locale différente.Pour Swift 3+
la source
Float?
et ne pas traiter les valeurs invalides comme0.0
. Laissez l'appelant faire quelque chose commelet val = field.floatValue ?? 0.0
si un cas donné devait traiter le mauvais résultat comme zéro.Swift 4/5, utilisez juste Float (valeur).
Réponse: 123200
la source
Utilisez ceci:
la source
Moyen facile:
vous pouvez utiliser la même approche pour d'autres calculs, espérons cette aide !!
la source
float