我有这段代码,其中长度和宽度相乘,但我需要它们是"浮点数"而不是"整数">
// 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)
如果区域设置很重要,请使用NumberFormatter
将Float
转换为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
(
为String
和Int
创建扩展,只需使用下面编写的计算属性,就像使用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
}