在Apple的Swift中将String转换为float

Ste*_*Fox 92 string floating-point string-parsing swift

我试图转换从UITextField获取的数字,我认为它实际上是字符串,并将它们转换为float,所以我可以将它们相乘.

我有两个UITextfields声明如下:

@IBOutlet var wage: UITextField
@IBOutlet var hour: UITextField
Run Code Online (Sandbox Code Playgroud)

当用户按下UIButton我想计算用户赚取的工资,但我不能,因为我需要先将它们转换为浮点数,然后再使用它们.

我知道如何通过这样做将它们转换为整数:

var wageConversion:Int = 0
wageConversion = wage.text.toInt()!
Run Code Online (Sandbox Code Playgroud)

但是,我不知道如何将它们转换为浮点数.

Fir*_*iro 191

Swift 2.0+

现在使用Swift 2.0,您可以使用Float(Wage.text)返回Float?类型.比刚刚返回的下面的解决方案更清楚0.

如果由于某种原因0需要无效值,则Float可以使用Float(Wage.text) ?? 0,0如果无效,则返回该值Float.


旧解决方案

处理此问题的最佳方法是直接投射:

var WageConversion = (Wage.text as NSString).floatValue
Run Code Online (Sandbox Code Playgroud)

我实际创建了一个extension更好地使用它:

extension String {
    var floatValue: Float {
        return (self as NSString).floatValue
    }
}
Run Code Online (Sandbox Code Playgroud)

现在您可以调用var WageConversion = Wage.text.floatValue并允许扩展程序为您处理桥接!

这是一个很好的实现,因为它可以处理实际的浮点数(输入.),也有助于防止用户将文本复制到输入字段(12p.34甚至甚至12.12.41).

显然,如果Apple确实floatValue向Swift 添加了一个,那么会抛出异常,但同时它可能会很好.如果他们稍后添加它,那么修改代码所需要做的就是删除扩展,一切都将无缝地工作,因为你已经在调用了.floatValue!

此外,变量和常量应以小写字母开头(包括IBOutlets)

  • @GoodbyeStackOverflow,我正在使用Beta 4,它肯定不起作用.也许他们在Beta 5中改变了它?`NSString`具有`floatValue`扩展名,但`String`没有.获取错误:`'String'没有名为floatValue`的成员 (3认同)

小智 22

因为在世界的某些地方,例如,使用逗号而不是小数.最好创建一个NSNumberFormatter来将字符串转换为float.

let numberFormatter = NSNumberFormatter()
numberFormatter.numberStyle = NSNumberFormatterStyle.DecimalStyle
let number = numberFormatter.numberFromString(self.stringByTrimmingCharactersInSet(Wage.text))
Run Code Online (Sandbox Code Playgroud)


Mer*_*ert 15

我以这种方式将String转换为Float:

let numberFormatter = NSNumberFormatter()
let number = numberFormatter.numberFromString("15.5")
let numberFloatValue = number.floatValue

println("number is \(numberFloatValue)") // prints "number is 15.5"
Run Code Online (Sandbox Code Playgroud)

  • 为什么要投票?评论会有所帮助 (6认同)

rdp*_*ado 9

更新

接受的答案显示了更新的做法

斯威夫特1

这就是Paul Hegarty在2015年斯坦福大学CS193p课程中的表现:

wageConversion = NSNumberFormatter().numberFromString(wage.text!)!.floatValue
Run Code Online (Sandbox Code Playgroud)

您甚至可以创建一个计算属性,而不必每次都这样做

var wageValue: Float {
        get {
            return NSNumberFormatter().numberFromString(wage.text!)!.floatValue
        }
        set {
            wage.text = "\(newValue)"
        }
    }
Run Code Online (Sandbox Code Playgroud)


小智 5

使用接受的解决方案,我发现我的"1.1"(当使用.floatValue转换时)将转换为1.10000002384186,这不是我想要的.但是,如果我使用.doubleValue代替,我会得到我想要的1.1.

因此,例如,我使用的不是使用已接受的解决方案:

var WageConversion = (Wage.text as NSString).doubleValue
Run Code Online (Sandbox Code Playgroud)

在我的情况下,我不需要双精度,但使用.floatValue并没有给我正确的结果.

只是想将其添加到讨论中以防其他人遇到同样的问题.


ban*_*isa 5

下面会给你一个可选的Float,坚持一个!最后如果你知道它是Float,或者使用if/let.

let wageConversion = Float(wage.text)
Run Code Online (Sandbox Code Playgroud)