1

我正在尝试使用 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
    }
}
4

0 回答 0