如何从UITextField到浮点数?

时间:2018-03-20 16:23:13

标签: ios swift uitextfield

我有这个代码,其中长度和宽度成倍增加,但我需要它们是'Float'数字而不是'整数'

// Outlets for square start
@IBOutlet weak var LengthForSquare: UITextField!
@IBOutlet weak var WidthForSquare: UITextField!
@IBOutlet weak var ResultForSquare: UILabel!
// Outlet for Square finish

@IBAction func AnswerForSquarePressed(_ sender: Any) {
    ResultForSquare.text = ((LengthForSquare.text! as NSString).integerValue * (WidthForSquare.text! as NSString).integerValue ).description
}

我想将'integerValue'转换为float,但每次尝试都会显示错误。

如果有人可以帮助我,那就太棒了。

3 个答案:

答案 0 :(得分:3)

智能 swifty 解决方案 现已涵盖链接副本,UITextField

的扩展名
extension UITextField {
    var floatValue : Float {
        let numberFormatter = NumberFormatter()
        numberFormatter.numberStyle = .decimal

        let nsNumber = numberFormatter.number(from: text!)
        return nsNumber == nil ? 0.0 : nsNumber!.floatValue
    }
}

并使用String(format而不是.description

ResultForSquare.text = String(format: "%.2f", LengthForSquare.floatValue * WidthForSquare.floatValue)

如果区域设置很重要,请同时使用NumberFormatterFloat转换为String

注意:请遵守变量名称以小写字母开头的命名约定。

答案 1 :(得分:0)

转换字符串中包含的常规数字(即非货币等)时,您不需要数字格式化程序:

let aString = "3.14159"
let defaultValue: Float = 0.0

let converted = Float(aString) ?? defaultValue

您可以使用您想要的任何字符串代替aString,并且可以使用您想要的任何浮点值替换defaultValue

在上面的示例中,converted最终会成为一个值为3.14159的浮点数。但是,如果aString类似于“TARDIS”,则converted最终会成为0.0。通过这种方式,您知道converted始终保留一个值,您无需解开任何内容即可。 (如果您离开?? defaultValue,则必须解开converted

答案 2 :(得分:-1)

StringInt创建了扩展程序,只需使用下面编写的计算属性,就像使用NSStringObject.intValue

一样
extension String {
    var intValue: Int {
        if let value = Int(self) {
            return value
        }
        return 0// Set your default int value if failed to convert string into Int
    }
    var floatValue: Float {
        if let value = Float(self) {
            return value
        }
        return 0// Set your default float value if failed to convert string into float
    }
    var doubleValue: Double {
        if let value = Double(self) {
            return value
        }
        return 0// Set your default double value if failed to convert string into Double
    }
    var boolValue: Bool {
        if let value = Bool(self) {
            return value
        }
        return false// Set your default bool value if failed to convert string into Bool
    }
}
extension Int {
    var stringValue: String {
        return "\(self)"
    }
    var floatValue: Float {
        return Float(self)
    }
    var doubleValue: Double {
        return Double(self)
    }
}


@IBAction func AnswerForSquarePressed(_ sender: Any) {
    let area = (LengthForSquare.text.intValue * WidthForSquare.text.intValue)
    ResultForSquare.text = area.stringValue
}