Operacje matematyczne z TextBox

0

Witam,

W jaki sposób mogę przekonwertować ciąg znaków np. z TextBoxa do wartości double. Chodzi o to:
TextBox.Text = "Math.Ceiling(20.1 * (2 +3))/2"

Poświęciłam na to sporo czasu, ale nic nie udało się wymiślić. Znalazłam bibliotekę CalcEngine.dll, ale ona ma wszystko poza opcją zaokrąglij :(

Z góry dziękuję za pomoc.

0
double d = Convert.ToDouble(textBox.Text);

A później operacje matematyczne na zmiennej d.

0

no tak to nie działa. Jeżeli w textboxie będzie cyfra 5 to nie ma problemu, ale jeżeli będzie tam 3+5 to już nie. Chcę pobrać od użytkownika jakiś wzór obliczeń, zapisać go w bazie danych i później podstawiać pod zmienne odpowiednie wartości.

0

Skorzystaj z wyrażeń regularnych.

0

yyyyy, że co proszę? Można prosić o jakiś przykład.

0

W sensie, chcesz sobie wpisać do textboxa wzór matematyczny w postaci kodu C# i obliczyć?

0

tak, w uproszczeniu chcę aby to wyglądało tak że: wpisuje do textboxa: Math.Ceiling(20.1 * (2 +3))/2 i otrzymuję wynik działania.

4

Nic prostszego - musisz tylko skompilować kod w locie, a potem przy użyciu refleksji go wywołać.
Np. tak:

 private void button1_Click(object sender, EventArgs e)
        {
            double result = Calculate(this.textBox1.Text);
            MessageBox.Show(result.ToString());
        }

        static double Calculate(string expression)
        {
            string pattern = @"
using System;
namespace MathNamespace
{{
    public class MathClass
    {{
        public static double Calculate()
        {{
            return {0};
        }}
    }}
}}";
            string source = string.Format(pattern, expression);

            CSharpCodeProvider provider = new CSharpCodeProvider();
            CompilerParameters parameters = new CompilerParameters()
            {
                GenerateExecutable = false,
                GenerateInMemory = true,
            };
            parameters.ReferencedAssemblies.Add("System.dll");

            CompilerResults compilerResult = provider.CompileAssemblyFromSource(parameters, source);

            Assembly assembly = compilerResult.CompiledAssembly;
            Type type = assembly.GetType("MathNamespace.MathClass");
            MethodInfo method = type.GetMethod("Calculate");

            return (double)method.Invoke(null, null);
        }
0

Jesteś wielki!!! Wszystko działa!
Dziękuję.

1 użytkowników online, w tym zalogowanych: 0, gości: 1