1

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.

isherwood
  • 58,414
  • 16
  • 114
  • 157
Jonty Morris
  • 797
  • 1
  • 10
  • 25

1 Answers1

2

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.

Jake
  • 13,097
  • 9
  • 44
  • 73