Я делал калькулятор в 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 ответ
В выражении используется целочисленное деление, поскольку ваши операнды - целые числа. Попробуйте вместо этого:
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
.
Похожие вопросы
Связанные вопросы
Новые вопросы
swift3
Используйте этот тег только для вопросов, непосредственно связанных с изменениями в версии 3 языка программирования Apple Swift. Используйте тег [swift] для более общих языковых вопросов или теги [ios], [cocoa], [apple-watch] и т. Д. Для вопросов о разработке на платформах Apple.