我一直试图用NSExpression的expressionValueWithObject()完成一些基本的数学运算,结果不一致。
例如,以下所有工作都很好:
NSExpression(format: "1+1").expressionValueWithObject(nil, context: nil) as? Float
(返回2)
NSExpression(format: "1+1.2").expressionValueWithObject(nil, context: nil) as? Float
(返回2.2)
NSExpression(format: "2**3").expressionValueWithObject(nil, context: nil) as? Float
(返回8)
NSExpression(format: "sqrt(2**3)").expressionValueWithObject(nil, context: nil) as? Float
(返回2.82 ......)
NSExpression(format: "log(2**3)").expressionValueWithObject(nil, context: nil) as? Float
(返回0.903 ......)
但是其他字符串方程似乎并不比这些更复杂,会产生错误的答案或根本没有答案。例如,
NSExpression(format: "1+(1/2)").expressionValueWithObject(nil, context: nil) as? Float
(返回1,而不是1.5)
和
NSExpression(format: "43 % 2").expressionValueWithObject(nil, context: nil) as? Float
(返回错误,尽管Swift本身可以使用相同的表示法原生计算43 Mod 2)
在最后两个例子中,我做错了什么?
答案 0 :(得分:1)
http://hg.openjdk.java.net/jdk8u/jdk8u-dev/jdk/file/4a1e42601d61/src/share/classes/java/nio/Bits.java有限。 %
不受支持。以下是built-in binary operators supported by NSExpression的可能解决方案:
NSExpression(format: "modulus:by:(43,2)").expressionValueWithObject(nil, context: nil) as? Float
使用整数除法计算{p> 1+(1/2)
并不令人惊讶。使用1+(1/2.0)
返回1.5。