2017-01-04 3 views
0

Я делаю калькулятор в Swift 3, но столкнулся с некоторыми проблемами.Как остановить NSExpression от округления

Я использовал 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.

Кто-нибудь знает, как остановить NSExpression от округления? Благодарю.

ответ

2

Выражение использует целочисленное деление, так как ваши операнды являются целыми числами. Попробуйте вместо этого:

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 оценивается в 1 перед вставкой в ​​Double инициализаторе.

Однако, этот код будет давать answer значение 1.5:

let answer = Double(3.0/2.0) 

Это происходит потому, что 3.0/2.0 будет оцениваться на основе операции деления для Double вместо операции деления Integer.

+1

Спасибо за помощь –

Смежные вопросы