我已经实现了一个自定义计算器,在这里我使用下面的代码来计算算术表达式,类似于5+3*5-3。
- (NSNumber *)evaluateArithmeticStringExpression:(NSString *)expression {
NSNumber *calculatedResult = nil;
@try {
NSPredicate * parsed = [NSPredicate predicateWithFormat:[expression stringByAppendingString:@" = 0"]];
NSExpression * left = [(NSComparisonPredicate *)parsed leftExpression];
calculatedResult = [left expressionValueWithObject:nil context:nil];
}
@catch (NSException *exception) {
NSLog(@"Input is not an expression...!");
}
@finally {
return calculatedResult;
}
}但是,当我有带除法运算的整数时,结果只能得到整数。假设5/2的结果是2。因为整数除法,所以对程序的抖动是正确的。
但我需要浮点结果。
如何获得它,而不是扫描表达式字符串,并将整数除数替换为浮点数。在我们的示例5/2.0或5.0/2中。
发布于 2014-05-28 12:46:08
我自己找到的。
- (NSNumber *)evaluateArithmeticStringExpression:(NSString *)expression {
NSNumber *calculatedResult = nil;
@try {
NSPredicate * parsed = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"1.0 * %@ = 0", expression]];
NSExpression * left = [(NSComparisonPredicate *)parsed leftExpression];
calculatedResult = [left expressionValueWithObject:nil context:nil];
}
@catch (NSException *exception) {
NSLog(@"Input is not an expression...!");
}
@finally {
return calculatedResult;
}
}它只是简单地以操作数"1.0 *“开始表达式,所有内容都将是浮点计算。
NSPredicate * parsed = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"1.0 * %@ = 0", expression]];请注意:谢谢@Martin,但是,我的问题不是整数除法,而是关于NSExpression的。我清楚地排除了最后一句。
@Zaph,这里使用异常处理是有原因的。在这个地方,我的方法正在接受用户输入,wehre用户可以输入类似w*g和- expressionValueWithObject: context:将会抛出一个异常,并且我必须避免我的应用程序的异常终止。如果用户输入了一个有效的表达式,那么他/她将以NSNumber的形式得到一个答案,否则就会得到一个零NSNumber对象。
https://stackoverflow.com/questions/23892130
复制相似问题