2010-04-09 3 views
11

Извините, если на этот вопрос уже дан ответ, но я не нашел подходящего ответа. У меня есть строковое выражение в C#, которое мне нужно преобразовать в int или десятичное значение.Преобразование строкового выражения в Integer Значение с использованием C#

Например:

string strExp = "10+20+30"; 

выход должен быть 60.

как мне это сделать ???

+0

Должен ли он также обрабатывать выражения, такие как '' 10 * (20 + 30) "' (= 500)? –

+0

ya любое действительное целочисленное или десятичное выражение – Jankhana

+0

http://social.msdn.microsoft.com/Forums/en-US/csharplanguage/thread/f73a413c-de70-43d5-8449-bbc39285a40e – Mou

ответ

6

Использование NCalc: стабильный, простой и мощный

+0

Эй, это здорово. Спасибо, что угуууууууууууууууууууу. – Jankhana

0

Вам необходимо проанализировать строку, разделив числа и операторы (+, -, *,/и т. Д.). Числа могут быть преобразованы в целые числа или десятичные числа с помощью команд .TryParse (например, Int32.TryParse()). Операторы могут обрабатываться с помощью оператора switch. Чем сложнее типы выражений, с которыми вы хотите справиться, тем сложнее они будут. Вы можете использовать рекурсию для обработки подвыражений в круглых скобках.

Редактировать: Я собирался найти образцы статей, но я вижу, что Одед уже опубликовал некоторые из них.

6

В .NET ничего не встроено, поэтому вам нужно будет использовать математический анализатор выражений и использовать его для получения результата.

Here является одним. И couple от articles.

+0

Спасибо за ответ. Я проверю и позволю вы знаете. – Jankhana

+0

Мне нравится подход кодека –

0

Возможно использование сценариев библиотеки - IronPython (питон), CS-скрипт (C#) или даже MSScriptControl (VBScript) - вы можете передать ваше выражение строкового библиотека для оценки.

Пример использования MSScript Control:

использованием MSScriptControl;

...

ScriptControl ScriptEngine = новый ScriptControlClass();

ScriptEngine.Language = "VBScript";

строка expr = "10 + 20 + 30";

объект result = ScriptEngine.Eval (expr);

decimal d = Convert.ToDecimal (результат);

+0

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

5

Fwiw, существует синтаксический анализатор выражений, встроенный в .NET framework. Метод DataTable.Compute() использует его:

using System; 
using System.Data; 

class Program { 
    static void Main(string[] args) { 
     var expr = "10 + 20 + 30"; 
     var result = new DataTable().Compute(expr, null); 
     Console.WriteLine(result); 
     Console.ReadLine(); 
    } 
} 

Остерегайтесь, однако, что это не очень полнофункциональный один. Только простые выражения, которые вы найдете в SQL-запросе.

+1

Синтаксис выражений, определенный здесь: http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression.aspx – Gabe

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