Преобразовать строку с математическими выражениями в число с плавающей точкой - PullRequest
0 голосов
/ 25 июля 2011

Текстовое поле содержит математические выражения, такие как: 12+45-6 Возможно ли преобразовать эту строку в число?

Можем ли мы использовать средство предиката?

NSString *foo = @"((a*b)/c+(d/5))+15";
// dummy predicate that contains our expression
NSPredicate *pred = [NSPredicate predicateWithFormat:[foo stringByAppendingString:@" == 42"]];
NSExpression *exp = [pred leftExpression];
NSNumber *result = [exp expressionValueWithObject:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:4], @"a",[NSNumber numberWithInt:7], @"b",[NSNumber numberWithInt:2], @"c",[NSNumber numberWithInt:20], @"d",nil]context:nil];
NSLog(@"%@", result); // logs "33"<br/>

Я тоже нашел это https://github.com/unixpickle/ANExpressionParser

Ответы [ 4 ]

2 голосов
/ 25 июля 2011

Одним из решений, которое не зависит от внешних библиотек, является сначала преобразование строки в последовательность токенов, а затем вычисление выражения с использованием алгоритма shunting-yard , подключенного к простому стековому компьютеру.

1 голос
/ 25 июля 2011

Вам нужно проанализировать этот вход с помощью парсера, а затем оценить его.Я слышал о людях, которые успешно используют muParser для этого, чтобы вы сами не писали.Проверьте это.http://muparser.sourceforge.net/

0 голосов
/ 25 июля 2011

Да, конечно, это возможно.

Вы должны изучить преобразование из инфикса в постфикс, используя стек: http://scriptasylum.com/tutorials/infix_postfix/algorithms/infix-postfix/index.htm

А затем посмотреть, как вычислить выражение postix, также используястек: http://scriptasylum.com/tutorials/infix_postfix/algorithms/postfix-evaluation/index.htm

0 голосов
/ 25 июля 2011

Да. Читайте о «оценке выражений» или используйте готовый интерпретатор сценариев. JavaScript доступен для всех программ iOS как часть WebView.

...