Я делал калькулятор в 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 .

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

1
Jonty Morris 4 Янв 2017 в 06:01

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

Однако этот код даст answer значение 1.5:

let answer = Double(3.0 / 2.0)

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

2
Jake 4 Янв 2017 в 06:26
1
Спасибо за помощь
 – 
Jonty Morris
4 Янв 2017 в 06:26