如何将数字从UITextField转换为浮点数



我有这段代码,其中长度和宽度相乘,但我需要它们是"浮点数"而不是"整数">

// 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
}

我想将"整数值"转换为浮点数,但每次尝试时都会显示错误。

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

智能快速解决方案,现在包含在链接副本中,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


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

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

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(

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
}

最新更新