2009-09-06 2 views
1

Что является лучшим способом, чтобы сделать расчеты по значениям в строке, например: «(3,25 * 4)/1,25 + 10»Выполнение вычислений по значениям в строке «3 + 4»

+0

Это было показано на переполнении стека: http://stackoverflow.com/questions/1384811/code-golf-mathematics-expression-evaluator-full-pemdas (я изначально проголосовал за то, чтобы закрыть как обман другого вопроса, который был неправильным, и я не могу его изменить сейчас) –

ответ

0

Преобразования из инфикса в постфикс нотации является одним из способов решения этой проблемы, так как вы можете использовать стек для разбора и вычислить выражение.

Имеется десяток решений, доступных в Интернете. Вот one of them.

1

Вы видели http://ncalc.codeplex.com?

Он расширяемый, быстрый (например, имеет собственный кэш) позволяет вам предоставлять пользовательские функции и переменные во время выполнения, обрабатывая события EvaluateFunction/EvaluateParameter. Пример выражение можно разобрать:

Expression e = new Expression("Round(Pow(Pi, 2) + Pow([Pi2], 2) + X, 2)"); 

    e.Parameters["Pi2"] = new Expression("Pi * Pi"); 
    e.Parameters["X"] = 10; 

    e.EvaluateParameter += delegate(string name, ParameterArgs args) 
    { 
     if (name == "Pi") 
     args.Result = 3.14; 
    }; 

    Debug.Assert(117.07 == e.Evaluate()); 

Он также обрабатывает типа изначально Юникод & много данных. Он поставляется с файлом antler, если вы хотите изменить грамматик. Существует также вилка, которая поддерживает MEF для загрузки новых функций.

Он также поддерживает логические операторы, строки даты/времени и операторы if.

+0

Попробуем, спасибо! –

Смежные вопросы