Может ли метод expressionValueWithObject интерпретировать числа как числа с плавающей точкой вместо целых чисел?
Я делаю калькулятор, который регистрирует входные данные в метке с именем «inputLabel», а затем выводит ответ в другой метке с именем «outputLabel» (аналогично графическому калькулятору). Как только пользователь заканчивает ввод выражения, выражение сохраняется в объект NSString, а затем анализируется с помощью класса NSPredicate и оценивается с помощью класса NSExpression. Что у меня работает, но я заметил, что для определенных операций ответы не верны. Например, если пользователь вводит в «25/2» калькулятор возвращает 12, что, очевидно, неверно. Однако, если пользователь вводит «25 / 2.0» или «25.0 / 2», калькулятор возвращает 12.5, что мне и нужно. Похоже, что метод NSExpression 'expressionValueWithObject' интерпретирует операнды как целые числа вместо числа с плавающей точкой. Если это так, то есть ли способ изменить метод expressionValueWithObject, чтобы интерпретировать операнды как числа с плавающей точкой?
Brain.m
-(float)performCalculation: (NSString *)operation
{
NSPredicate *parsed = [NSPredicate predicateWithFormat:[operation stringByAppendingString:@"=1.0"]];
NSExpression *inputExpressionParsed = [(NSComparisonPredicate *)parsed leftExpression];
NSNumber *result = [inputExpressionParsed expressionValueWithObject:inputExpressionParsed context:nil];
return [result floatValue];
}
ViewController.m
- (IBAction)equalsPressed:(id)sender
{
//self.inputLabel.text = [self.inputLabel.text stringByAppendingString:@".0"];
NSString *inputExpression = self.inputLabel.text;
self.inputLabel.text = [self.inputLabel.text stringByAppendingString:@"="];
float result = [self.brain performCalculation:inputExpression];
self.outputLabel.text = [NSString stringWithFormat:@"%g", result];
}