string text = "19 + (4 * 273) =";
string skobki = @"(?<=\().*(?=\))"; // выбор из скобок
string skobki_chislo_1 = @".*?(?=\s)"; // получение 1-го числа из скобок
string skobki_operator = @"(?<=\s).*?(?=\s)"; // получение оператора умножения
string skobki_chislo_2 = @"(?<=\*).*"; // получение 2-го числа из скобок
string chislo = @".*?(?=\s)"; // получение числа за скобками
string op = @"(?<=\s).*(?=\s\()"; // получение оператора за скобками
string out_skobki = System.Text.RegularExpressions.Regex.Match(text, skobki).ToString();
string out_skobki_chislo_1 = System.Text.RegularExpressions.Regex.Match(out_skobki, skobki_chislo_1).ToString();
string out_skobki_operator = System.Text.RegularExpressions.Regex.Match(out_skobki, skobki_operator).ToString();
string out_skobki_chislo_2 = System.Text.RegularExpressions.Regex.Match(out_skobki, skobki_chislo_2).ToString();
string out_chislo = System.Text.RegularExpressions.Regex.Match(text, chislo).ToString();
string out_op = System.Text.RegularExpressions.Regex.Match(text, op).ToString();
int res_out = 0;
switch(out_skobki_operator)
{
case "*":
res_out = int.Parse(out_skobki_chislo_1) * int.Parse(out_skobki_chislo_2);
break;
case "/":
res_out = int.Parse(out_skobki_chislo_1) / int.Parse(out_skobki_chislo_2);
break;
case "+":
res_out = int.Parse(out_skobki_chislo_1) + int.Parse(out_skobki_chislo_2);
break;
case "-":
res_out = int.Parse(out_skobki_chislo_1) - int.Parse(out_skobki_chislo_2);
break;
}
switch(out_op)
{
case "*":
res_out = int.Parse(out_chislo) * res_out;
break;
case "/":
res_out = int.Parse(out_chislo) / res_out;
break;
case "+":
res_out = int.Parse(out_chislo) + res_out;
break;
case "-":
res_out = int.Parse(out_chislo) - res_out;
break;
}
return res_out;
var result = new DataTable().Compute("19 + (4 * 273)", null); // 1111
({-Variable.priceZac-}*{-Variable.kyrs-}/0.78)+({-Variable.KyrsUSD-}*3.9)
Создайте такой набор переменных, введите в эти переменные данные и будет работать. Разделитель для рядности числа, символ ",".Математические действия с С#. Упираюсь уже не один час. Подскажите пожалуйста как это из JS разложить в C#. В переменных не целые числа. Спасибо!
JavaScript:({-Variable.priceZac-}*{-Variable.kyrs-}/0.78)+({-Variable.KyrsUSD-}*3.9)
double priceZac = double.Parse(project.Variables["priceZac"].Value);
double kyrs = double.Parse(project.Variables["kyrs"].Value);
double KyrsUSD = double.Parse(project.Variables["KyrsUSD"].Value);
double res = (priceZac * kyrs / 0.78) + (KyrsUSD * 3.9);
project.Variables["res"].Value = res.ToString();
project.SendInfoToLog(res.ToString());
double priceZac = double.Parse(project.Variables["priceZac"].Value);
double kyrs = double.Parse(project.Variables["kyrs"].Value);
double KyrsUSD = double.Parse(project.Variables["KyrsUSD"].Value);
double res = (priceZac * kyrs / 0.78) + (KyrsUSD * 3.9);
project.Variables["MinDopystimPrice"].Value = res.ToString();
project.SendInfoToLog(res.ToString());
Кажется, перед этой формулой есть ещё манипуляции в js, а может и после.)Милый человек, дай Бог тебе здоровья. Проекты стараюсь писать без использования браузера, и постоянно ругается Zenka.
Неправильно считает.
priceZac = 1,56
kyrs = 23,5
KyrsUSD = 60
когда решает C# результат 281
когда решает JS результат 240
C#:double priceZac = double.Parse(project.Variables["priceZac"].Value); double kyrs = double.Parse(project.Variables["kyrs"].Value); double KyrsUSD = double.Parse(project.Variables["KyrsUSD"].Value); double res = (priceZac * kyrs / 0.78) + (KyrsUSD * 3.9); project.Variables["MinDopystimPrice"].Value = res.ToString(); project.SendInfoToLog(res.ToString());
double Zakypka = double.Parse(project.Variables["Zakypka"].Value);
double Nalig = double.Parse(project.Variables["Nalig"].Value);
double MinDohod = double.Parse(project.Variables["MinDohod"].Value);
double baliZaOtzivi = double.Parse(project.Variables["baliZaOtzivi"].Value);
double RURBUN = double.Parse(project.Variables["RURBUN"].Value);
double obrabotkaOzon = double.Parse(project.Variables["obrabotkaOzon"].Value);
double avtoActionPercent = double.Parse(project.Variables["avtoActionPercent"].Value);
double prodvijenie = double.Parse(project.Variables["prodvijenie"].Value);
double percent = double.Parse(project.Variables["percent"].Value);
double Upakovka = double.Parse(project.Variables["Upakovka"].Value);
double dostavka = double.Parse(project.Variables["dostavka"].Value);
double mila = double.Parse(project.Variables["mila"].Value);
double eqar = double.Parse(project.Variables["eqar"].Value);
double X = 0; // Начальное значение X
double equationResult = 0; // Инициализация результата уравнения
// Итеративный подход для нахождения значения X
while (true)
{
equationResult = MinDohod + (X * baliZaOtzivi) + (X * prodvijenie) + obrabotkaOzon + (X * percent) + (X * Upakovka) + (X * dostavka) + (X * mila) + (X * eqar) + (Zakypka * RURBUN) + (X - ((X * baliZaOtzivi) + (X * prodvijenie) + obrabotkaOzon + (X * percent) + (X * Upakovka) + (X * dostavka) + (X * mila) + (X * eqar)) - (Zakypka * RURBUN)) * Nalig;
// Проверка условия для выхода из цикла
if (Math.Abs(equationResult - X) < 0.0001)
break;
X = equationResult;
}
double roundedX = Math.Round(X);
project.Variables["roundedX"].Value = roundedX.ToString();
return roundedX;
X = 180 + ((X * 0) + (X * 0.085) + (X * 0.13) + (X * 0.03) + (X * 0.06) + (X * 0.055) + (X * 0.015) + (10 * 28) + (X - ((X * 0) + (X * 0.085) + (X * 0.13) + (X * 0.03) + (X * 0.06) + (X * 0.055) + (X * 0.015)) - (10 * 28) * 0.2