首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从NSExpression:context方法中获取浮点数?

如何从NSExpression:context方法中获取浮点数?
EN

Stack Overflow用户
提问于 2014-05-27 14:28:35
回答 1查看 1.1K关注 0票数 5

我已经实现了一个自定义计算器,在这里我使用下面的代码来计算算术表达式,类似于5+3*5-3。

代码语言:javascript
复制
- (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中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-28 12:46:08

我自己找到的。

代码语言:javascript
复制
- (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 *“开始表达式,所有内容都将是浮点计算。

代码语言:javascript
复制
NSPredicate * parsed = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"1.0 * %@ = 0", expression]];

请注意:谢谢@Martin,但是,我的问题不是整数除法,而是关于NSExpression的。我清楚地排除了最后一句。

@Zaph,这里使用异常处理是有原因的。在这个地方,我的方法正在接受用户输入,wehre用户可以输入类似w*g和- expressionValueWithObject: context:将会抛出一个异常,并且我必须避免我的应用程序的异常终止。如果用户输入了一个有效的表达式,那么他/她将以NSNumber的形式得到一个答案,否则就会得到一个零NSNumber对象。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23892130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档