我有这个代码,其中长度和宽度成倍增加,但我需要它们是'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,但每次尝试都会显示错误。
如果有人可以帮助我,那就太棒了。
答案 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)
如果区域设置很重要,请同时使用NumberFormatter
将Float
转换为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)
为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
}