我正在制作一个计算器,它将输入记录在名为“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];
}
视图控制器.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];
}
No, NSExpression
不可以这样做。您可以尝试将“.0”附加到所有整数
在评估字符串之前,但更好的解决方案可能是使用“适当的”
例如,数学表达式解析器https://github.com/davedelong/DDMathParser
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)