我正在尝试使用 NSPredicate 和 NSExpression 解决数学表达式。
如果在每个操作数处输入带有浮点数的表达式,则计算得到正确解决。
某些操作数缺少浮点数的表达式,结果可能是错误的。
为了向您展示我已经在这里尝试过的是我正在测试的游乐场代码。
破碎的
的计算5 * (5/2)
结果应该是 12.5,但表达式给我的结果是 10.0,因为它计算5 * 2
let input1 = "5*(5/2)" // == 10.0, should be 12.5
let predicate1 = NSPredicate(format: "1.0 * \(input1) = 0")
if let comparisation = predicate1 as? NSComparisonPredicate {
let leftExpression = comparisation.leftExpression
if let result = leftExpression.expressionValue(with: nil,
context: nil) as? NSNumber {
print("Result is: \(result.doubleValue)") // == 10.0
}
}
解决方法
为了向您展示使用 NSExpression 计算确实有效,这是我目前解决上述结果的工作。
let input2 = "5*(5.0/2.0)" // == 12.5
let predicate2 = NSPredicate(format: "1.0 * \(input2) = 0")
if let comparisation = predicate2 as? NSComparisonPredicate {
let leftExpression = comparisation.leftExpression
if let result = leftExpression.expressionValue(with: nil,
context: nil) as? NSNumber {
print("Result is: \(result.doubleValue)") // == 12.5
}
}