Reputation: 807
I've been making a calculator in Swift 3, but have run into some problems.
I have been using NSExpression to calculate the users equation, but the answer is always rounded.
To check that the answer was rounded, I calculated 3 / 2.
let expression = NSExpression(format: "3 / 2");
let answer: Double = expression.expressionValue(with: nil, context: nil) as! Double;
Swift.print(String(answer));
The above code outputs 1.0, instead of 1.5.
Does anyone know how to stop NSExpression from rounding? Thanks.
Upvotes: 1
Views: 908
Reputation: 13753
The expression is using integer division since your operands are integers. Try this instead:
let expression = NSExpression(format: "3.0 / 2.0");
let answer: Double = expression.expressionValue(with: nil, context: nil) as! Double;
Swift.print(String(answer));
Consider the following code:
let answer = Double(3 / 2)
answer
in this case would still be 1.0
since 3 / 2
is evaluated to 1
before being inserted in the Double
initializer.
However, this code would give answer
the value of 1.5
:
let answer = Double(3.0 / 2.0)
This is because 3.0 / 2.0
will be evaluated based on the division operation for Double
instead of the division operation of Integer
.
Upvotes: 2