我正在制作一个计算器,它在名为“inputLabel”的标签中记录输入,然后在名为“outputLabel”的不同标签中输出答案(类似于图形计算器)。一旦用户完成输入表达式,表达式将存储在一个 NSString 对象,然后用 NSPredicate 类解析并用 NSExpression 类评估。我有什么工作,但我注意到对于特定操作,答案不正确。例如,如果用户输入“25/2”计算器返回 12,这显然是不正确的。但是,如果用户输入“25/2.0”或“25.0/2”,则计算器返回 12.5,这就是我想要的。似乎 NSExpression 方法 'expressionValueWithObject' 将操作数解释为整数而不是浮点数。如果是这种情况,有没有办法改变'expressionValueWithObject'方法来将操作数解释为浮点数?
大脑.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];
}
视图控制器.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];
}