Convert String to Float in Swift
Solution 1:
Swift 2.0+
Now with Swift 2.0 you can just use Float(Wage.text)
which returns a Float?
type. More clear than the below solution which just returns 0
.
If you want a 0
value for an invalid Float
for some reason you can use Float(Wage.text) ?? 0
which will return 0
if it is not a valid Float
.
Old Solution
The best way to handle this is direct casting:
var WageConversion = (Wage.text as NSString).floatValue
I actually created an extension
to better use this too:
extension String {
var floatValue: Float {
return (self as NSString).floatValue
}
}
Now you can just call var WageConversion = Wage.text.floatValue
and allow the extension to handle the bridge for you!
This is a good implementation since it can handle actual floats (input with .
) and will also help prevent the user from copying text into your input field (12p.34
, or even 12.12.41
).
Obviously, if Apple does add a floatValue
to Swift this will throw an exception, but it may be nice in the mean time. If they do add it later, then all you need to do to modify your code is remove the extension and everything will work seamlessly, since you will already be calling .floatValue
!
Also, variables and constants should start with a lower case (including IBOutlets
)
Solution 2:
Because in some parts of the world, for example, a comma is used instead of a decimal. It is best to create a NSNumberFormatter to convert a string to float.
let numberFormatter = NSNumberFormatter()
numberFormatter.numberStyle = NSNumberFormatterStyle.DecimalStyle
let number = numberFormatter.numberFromString(self.stringByTrimmingCharactersInSet(Wage.text))
Solution 3:
I convert String to Float in this way:
let numberFormatter = NSNumberFormatter()
let number = numberFormatter.numberFromString("15.5")
let numberFloatValue = number.floatValue
println("number is \(numberFloatValue)") // prints "number is 15.5"