如何阻止 NSExpression 舍入

Posted

技术标签:

【中文标题】如何阻止 NSExpression 舍入【英文标题】:How to stop NSExpression from rounding 【发布时间】:2017-01-04 03:01:07 【问题描述】:

我一直在用 Swift 3 制作计算器,但遇到了一些问题。

我一直在用NSExpression计算用户方程,但答案总是四舍五入。

为了检查答案是否四舍五入,我计算了 3 / 2

let expression = NSExpression(format: "3 / 2");
let answer: Double = expression.expressionValue(with: nil, context: nil) as! Double;
Swift.print(String(answer));

上面的代码输出的是1.0,而不是1.5

有谁知道?谢谢。

【问题讨论】:

【参考方案1】:

表达式使用整数除法,因为您的操作数是整数。试试这个:

let expression = NSExpression(format: "3.0 / 2.0");
let answer: Double = expression.expressionValue(with: nil, context: nil) as! Double;
Swift.print(String(answer));

考虑以下代码:

let answer = Double(3 / 2)

answer 在这种情况下仍然是1.0,因为3 / 2 在插入Double 初始化程序之前被评估为1

但是,这段代码会给answer 提供1.5 的值:

let answer = Double(3.0 / 2.0)

这是因为3.0 / 2.0 将根据Double 的除法运算而不是Integer 的除法运算进行评估。

【讨论】:

感谢您的帮助

以上是关于如何阻止 NSExpression 舍入的主要内容,如果未能解决你的问题,请参考以下文章

如何阻止 mysql 舍入浮点值?

如何从 NSExpression 获取 NSManagedObject?

如何使用 NSExpression 使用自定义函数设置 NSFetchRequest propertiesToFetch

如何从 NSExpression 的 expressionValueWithObject:context 方法中获取浮点数?

如何使 NSExpression 的 expressionForFunction:withArguments: 尊重获取请求的谓词

如何从 NativeScript 调用 Objective-C NSExpression(format: ....)?