【问题标题】:Find the exponential value using NSExpression?使用 NSExpression 找到指数值?
【发布时间】:2012-10-22 12:07:01
【问题描述】:

我正在尝试使用NSExpression 计算指数值,如下所示:

NSNumber *number1 = [NSNumber numberWithInteger:2];        
NSNumber *number2 = [NSNumber numberWithInteger:4];

NSArray *arrNum=[NSArray arrayWithObjects:number1,number2,nil];
NSExpression *arrayExpression = [NSExpression expressionForConstantValue: arrNum];

NSArray *arrExp=[NSArray arrayWithObject:arrayExpression]; 

NSExpression* expression =[NSExpression expressionForFunction:@"raise:toPower:" arguments:arrExp];

NSLog(@"powerExp:%@",expression);

int  resultSum = [[expression expressionValueWithObject:nil context: nil] intValue];

NSLog(@"resultnum:%f",resultSum);

我得到了错误:

-[__NSArrayI doubleValue]:无法识别的选择器发送到实例 0x7439e60 2012-10-22 16:04:04.034 operator[3958:c07] * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[__NSArrayI doubleValue]:无法识别的选择器发送到实例 0x7439e60”

【问题讨论】:

    标签: objective-c ios expression


    【解决方案1】:
    NSNumber *number1 = [NSNumber numberWithInteger:2];
    NSNumber *number2 = [NSNumber numberWithInteger:4];
    
    NSExpression *expr1 = [NSExpression expressionForConstantValue:number1];
    NSExpression *expr2 = [NSExpression expressionForConstantValue:number2];
    
    NSArray *exprArgs = [NSArray arrayWithObjects:expr1, expr2, nil];
    
    NSExpression *expression = [NSExpression expressionForFunction:@"raise:toPower:" arguments:exprArgs];
    NSLog(@"powerExp:%@",expression);
    
    int resultSum = [[expression expressionValueWithObject:nil context: nil] intValue];
    NSLog(@"resultnum:%d",resultSum);
    

    输出:

    powerExp:2 ** 4
    resultnum:16
    

    【讨论】:

    • @sayalSnaking:改变问题(特别是在你得到答案之后)是个坏主意。没有人会理解对您的第一个问题给出的答案。 - 如果您有新问题,请发布新问题!我会回滚你的更改。
    • 由于我的问题已关闭,我无法提问,所以只能编辑这个问题。
    • NSString *strCal=[NSString stringWithFormat:@"((%d%@)%@)%@",number,strMinus,strDivide,strMultiple]; NSExpression *exp=[NSExpression 表达式WithFormat:strCal];浮动结果=[[exp expressionValueWithObject:nil context:nil] floatValue]; NSLog(@"result:%f",result); strCal 的打印描述:((28-18)/87)*100 预期输出应该是 11.49 但我得到的结果是 0.0000
    【解决方案2】:

    expressionForConstantValue: 采用NSNumber。你通过了NSArrayNSNumber

    exp: 函数采用单个数字 (n) 并返回 e^n。那是你想要做的吗?还是您的意思是使用raise:toPower:,它需要两个值?

    【讨论】:

    • 我更新了我的问题提出:toPower:但同样的错误来了。
    • expressionForConstantValue: 仍然需要一个 NSNumber,而不是 NSArray
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多