如何从NSExpression的expressionValueWithObject:context方法中获取浮点数?
我已经实现了一个自定义计算器,我使用下面的代码来计算像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中。
我自己找到了。
- (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]];
NB:谢谢@Martin R但是,我的问题不是关于整数除法,而是完全关于NSExpression。 我的最后一句话明显被排除在外。
@Zaph,这里使用exception处理有很多原因。 这是我的方法接受用户输入的地方,用户可以输入类似w * g和 – expressionValueWithObject:context:将抛出exception,我必须避免我的应用程序的exception终止。 如果用户输入了有效的表达式,那么他/她将以NSNumber的forms得到答案,否则将获得nil NSNumber对象。
- 如何将波斯语date转换成格里高利快速
- 什么是PBItemCollectionServicer?
- UICollectionView在iOS中删除单元格的animation时间
- Firebase身份validation(使用自定义令牌,适用于Linkedin)返回一个没有电子邮件和没有数据的用户(仅限于uid)
- 使用NSSetUncaughtExceptionHandler在Objective C中注册UncaughtExceptionHandler
- 如何删除第一个单元格顶部的分隔符和最后一个单元格底部
- 找不到Xcode CoreFoundation / CFUserNotification.h'文件
- 无法在静态库中find标题
- sed:用换行符在特定模式之后插入行