如何阻止 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 舍入的主要内容,如果未能解决你的问题,请参考以下文章
如何从 NSExpression 获取 NSManagedObject?
如何使用 NSExpression 使用自定义函数设置 NSFetchRequest propertiesToFetch
如何从 NSExpression 的 expressionValueWithObject:context 方法中获取浮点数?
如何使 NSExpression 的 expressionForFunction:withArguments: 尊重获取请求的谓词