在 Swift 中将分数从 UITextField 转换为小数
Converting fractions into decimals from UITextField in Swift
是否可以将输入到 UITextField 中的分数转换为小数?
到目前为止,这是我尝试过的方法。如果我在 UITextField 中输入 2/3,我会得到 2.0 作为我的答案。
@IBOutlet weak var answer: UITextField!
var sAnswer = (answer.text as NSString).doubleValue
println(sAnswer)
如果我只使用它,我会得到 2/3 但它是一个字符串而不是 0.6666666666 的十进制答案...
@IBOutlet weak var answer: UITextField!
var sAnswer = answer.text as NSString
println(sAnswer)
没有。文本将始终是一个字符串。但是你可以做的是,为你的 UITextField 做一个扩展,你在 /
处分割你的字符串并分开它。那你return双倍值。像那样:
extension UITextField {
var xo: Double! {
get {
var value = self.text.componentsSeparatedByString("/")
return (value[0] as NSString).doubleValue / (value[1] as NSString).doubleValue
}
}
}
然后你就这样使用它:
answer.doubleValue
您需要在方法或扩展中自行解析并计算分数。一种做法如下:
extension UITextField {
var fraction: Float {
var comps = text.componentsSeparatedByString("/")
//Do some validation here so as to check the correct format of fraction text.
var op1 = NSString(string: comps[0]).floatValue
var op2 = NSString(string: comps[1]).floatValue
return op1/op2
}
}
更现代的Swift5 解决方案:
func parse(fractionString: String) -> Float? {
guard fractionString.range(of: "^\d+\/\d+$", options: .regularExpression) != nil else { return nil }
let components = fractionString.split(separator: "/")
if let numerator = Float(components[0]),
let denominator = Float(components[1]),
denominator != 0 {
return numerator / denominator
}
return nil
}
开头的正则表达式检查只是确保输入的字符串只是中间有一个“/”的数字。
SWIFT 5.3
var fraction: String = "1/3"
var new = fraction.components(separatedBy: "/")
打印(新)
["1", "3"]
从这一点你可以return除法结果。我提供这个答案是因为在 swift.
的较新版本中更改了“分隔符”符号
func convertStringToFraction(stringNumber: String) -> Float {
let stringFloat = stringNumber.components(separatedBy: "/")
let numerator = Float(stringFloat[0])!
let denominator = Float(stringFloat[1])!
return numerator / denominator
}
是否可以将输入到 UITextField 中的分数转换为小数?
到目前为止,这是我尝试过的方法。如果我在 UITextField 中输入 2/3,我会得到 2.0 作为我的答案。
@IBOutlet weak var answer: UITextField!
var sAnswer = (answer.text as NSString).doubleValue
println(sAnswer)
如果我只使用它,我会得到 2/3 但它是一个字符串而不是 0.6666666666 的十进制答案...
@IBOutlet weak var answer: UITextField!
var sAnswer = answer.text as NSString
println(sAnswer)
没有。文本将始终是一个字符串。但是你可以做的是,为你的 UITextField 做一个扩展,你在 /
处分割你的字符串并分开它。那你return双倍值。像那样:
extension UITextField {
var xo: Double! {
get {
var value = self.text.componentsSeparatedByString("/")
return (value[0] as NSString).doubleValue / (value[1] as NSString).doubleValue
}
}
}
然后你就这样使用它:
answer.doubleValue
您需要在方法或扩展中自行解析并计算分数。一种做法如下:
extension UITextField {
var fraction: Float {
var comps = text.componentsSeparatedByString("/")
//Do some validation here so as to check the correct format of fraction text.
var op1 = NSString(string: comps[0]).floatValue
var op2 = NSString(string: comps[1]).floatValue
return op1/op2
}
}
更现代的Swift5 解决方案:
func parse(fractionString: String) -> Float? {
guard fractionString.range(of: "^\d+\/\d+$", options: .regularExpression) != nil else { return nil }
let components = fractionString.split(separator: "/")
if let numerator = Float(components[0]),
let denominator = Float(components[1]),
denominator != 0 {
return numerator / denominator
}
return nil
}
开头的正则表达式检查只是确保输入的字符串只是中间有一个“/”的数字。
SWIFT 5.3
var fraction: String = "1/3"
var new = fraction.components(separatedBy: "/")
打印(新)
["1", "3"]
从这一点你可以return除法结果。我提供这个答案是因为在 swift.
的较新版本中更改了“分隔符”符号func convertStringToFraction(stringNumber: String) -> Float {
let stringFloat = stringNumber.components(separatedBy: "/")
let numerator = Float(stringFloat[0])!
let denominator = Float(stringFloat[1])!
return numerator / denominator
}