ios – 如何从NSExpression的expressionValueWithObject:context方法中获取浮点数?

ios – 如何从NSExpression的expressionValueWithObject:context方法中获取浮点数?,第1张

概述我已经实现了一个自定义计算器,我使用下面的代码来计算类似5 3 * 5-3的算术表达式. - (NSNumber *)evaluateArithmeticStringExpression:(NSString *)expression { NSNumber *calculatedResult = nil; @try { NSPredicate * parsed = 我已经实现了一个自定义计算器,我使用下面的代码来计算类似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结果.由于整数除法,它适合于编程的动摇.

But I need floating point result.

我怎样才能得到它而不是扫描表达式字符串并将整数除数替换为浮点.在我们的示例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,这里使用异常处理是有充分理由的.这是我的方法接受用户输入的地方,用户可以输入类似w * g和 – ExpressionValueWithObject:context:将抛出异常,我必须避免我的应用程序的异常终止.如果用户输入了有效的表达式,那么他/她将以NSNumber的形式获得答案,否则将获得nil NSNumber对象.

总结

以上是内存溢出为你收集整理的ios – 如何从NSExpression的expressionValueWithObject:context方法中获取浮点数?全部内容,希望文章能够帮你解决ios – 如何从NSExpression的expressionValueWithObject:context方法中获取浮点数?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1076076.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存