How to stop NSExpression from rounding

873 Views Asked by At

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.

1

There are 1 best solutions below

1
On BEST ANSWER

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.