Подскажите код под арифметику...

Регистрация
13.04.2016
Сообщения
650
Благодарностей
53
Баллы
28
если в переменной temp лежит 1, формула: {-Variable.first-}*{-Variable.second-}
если в переменной temp лежит 2, формула: {-Variable.third-}*{-Variable.fourth-}
и т.д.

как то так.
спасибо!
 
Последнее редактирование:

Dr.Pipetka

Client
Регистрация
12.12.2017
Сообщения
1 304
Благодарностей
864
Баллы
113
Как вариант:
C#:
var result = 0;
int x = 1;
switch (x)
{
    case 1:
        result = int.Parse(project.Variables["first"].Value) * int.Parse(project.Variables["second"].Value);
        break;
    case 2:
        result = int.Parse(project.Variables["third"].Value) * int.Parse(project.Variables["fourth"].Value);
        break;
}
 
  • Спасибо
Реакции: Анатолий
Регистрация
13.04.2016
Сообщения
650
Благодарностей
53
Баллы
28
Как вариант:
C#:
var result = 0;
int x = 1;
switch (x)
{
    case 1:
        result = int.Parse(project.Variables["first"].Value) * int.Parse(project.Variables["second"].Value);
        break;
    case 2:
        result = int.Parse(project.Variables["third"].Value) * int.Parse(project.Variables["fourth"].Value);
        break;
}
как то сложновато, у меня таких строк более 50...
первые две строки всегда неизменны?
 

Deisler

Client
Регистрация
26.10.2019
Сообщения
486
Благодарностей
190
Баллы
43
если в переменной temp лежит 1, формула: {-Variable.first-}*{-Variable.second-}
если в переменной temp лежит 2, формула: {-Variable.third-}*{-Variable.fourth-}
и т.д.

как то так.
спасибо!
Первым кубиком приведите вашу формулу с "нормальному" виду. То есть с цифрами. После этого выполняете следующий код
C#:
var formula = project.Variables["arithmeticExpression"].Value;
DataTable dt = new DataTable();       // Создаем объект DataTable
var result = dt.Compute(formula, ""); // Вычисляем арифметическое выражение из переменной formula
return result;
109686
 
Регистрация
13.04.2016
Сообщения
650
Благодарностей
53
Баллы
28
Первым кубиком приведите вашу формулу с "нормальному" виду. То есть с цифрами. После этого выполняете следующий код
C#:
var formula = project.Variables["arithmeticExpression"].Value;
DataTable dt = new DataTable();       // Создаем объект DataTable
var result = dt.Compute(formula, ""); // Вычисляем арифметическое выражение из переменной formula
return result;
Посмотреть вложение 109686
я благодарен что откликнулись, но мало что понял, ведь формулы всегда разные, в зависимости от значения...


нельзяли что попроще придумать типа такого:
if(project.Variables["SUMMA"].Value == "123") project.Variables["skruglitel"].Value = "0";
if(project.Variables["SUMMA"].Value == "125") project.Variables["skruglitel"].Value = "1";
if(project.Variables["SUMMA"].Value == "225") project.Variables["skruglitel"].Value = "2";

но только с умножением?
 

Deisler

Client
Регистрация
26.10.2019
Сообщения
486
Благодарностей
190
Баллы
43
Может я не правильно понял вашу задачу...

У вас в переменной лежит формула и вам нужно получить результат арефмитического действия, по этой формуле ?
 
  • Спасибо
Реакции: Анатолий
Регистрация
13.04.2016
Сообщения
650
Благодарностей
53
Баллы
28
если в переменной temp лежит 1, формула: {-Variable.first-}*{-Variable.second-}
если в переменной temp лежит 2, формула: {-Variable.third-}*{-Variable.fourth-}

temp=1 значит 5*8
temp=2 значит 3*8
.
.
.
temp=52 значит 12*9

вернуть значение
 

Deisler

Client
Регистрация
26.10.2019
Сообщения
486
Благодарностей
190
Баллы
43
Ночь... пора спать ) неправильно понял задачу ) Вам выше правильно написали как все это прописать.

C#:
int x = Convert.ToInt32(project.Variables["temp"].Value);
switch (x)
{
    case 1:
        return int.Parse(project.Variables["first"].Value) * int.Parse(project.Variables["second"].Value);
        break;
    case 2:
        return int.Parse(project.Variables["third"].Value) * int.Parse(project.Variables["fourth"].Value);
        break;
}
Да, для каждого значения temp надо руками прописать формулу. Более универсального варианта не подскажу
 
  • Спасибо
Реакции: Анатолий
Регистрация
13.04.2016
Сообщения
650
Благодарностей
53
Баллы
28
благодарю за помощь!
 

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
726
Благодарностей
476
Баллы
63
если в переменной temp лежит 1, формула: {-Variable.first-}*{-Variable.second-}
если в переменной temp лежит 2, формула: {-Variable.third-}*{-Variable.fourth-}
и т.д.

как то так.
спасибо!
Если у вас 52 переменных Variable. то это очень плохо, я бы сделал список, где хранил бы значения.
Тогда можно будет применить формулу без всяких кейсов:

есть temp от 1-52 есть формула:
C#:
i = temp + (temp - 1) - 1
x = lst[i]
y = lst[i + 1]
result = x * y
C#:
Пример:
temp = 7;
рассчитаем index для получения Х:
i = 7 + (7-1) - 1 = 12;

Получаем:
x = lst[i]
y = lst[i+1]

result = x * y;
 
Последнее редактирование:
  • Спасибо
Реакции: Анатолий

Dr.Pipetka

Client
Регистрация
12.12.2017
Сообщения
1 304
Благодарностей
864
Баллы
113
первые две строки всегда неизменны?
Да вообще без них можно
C#:
switch (project.Variables["temp"].Value)
{
    case "1":
        return int.Parse(project.Variables["first"].Value) * int.Parse(project.Variables["second"].Value);
    case "2":
        return int.Parse(project.Variables["third"].Value) * int.Parse(project.Variables["fourth"].Value);
}
 
  • Спасибо
Реакции: Анатолий

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 773
Благодарностей
1 444
Баллы
113
нельзяли что попроще придумать типа такого:
if(project.Variables["SUMMA"].Value == "123") project.Variables["skruglitel"].Value = "0";
if(project.Variables["SUMMA"].Value == "125") project.Variables["skruglitel"].Value = "1";
if(project.Variables["SUMMA"].Value == "225") project.Variables["skruglitel"].Value = "2";

но только с умножением?
можно ;-)

C#:
if(int.Parse(project.Variables["temp"].Value) == 1) return double.Parse(project.Variables["first"].Value.Replace(".",",")) * double.Parse(project.Variables["second"].Value.Replace(".",","));
if(int.Parse(project.Variables["temp"].Value) == 2) return double.Parse(project.Variables["third"].Value.Replace(".",",")) * double.Parse(project.Variables["fourth"].Value.Replace(".",","));
if(int.Parse(project.Variables["temp"].Value) == 3) return double.Parse(project.Variables["fifth"].Value.Replace(".",",")) * double.Parse(project.Variables["sixth"].Value.Replace(".",","));
if(int.Parse(project.Variables["temp"].Value) == 4) return double.Parse(project.Variables["seventh"].Value.Replace(".",",")) * double.Parse(project.Variables["eighth"].Value.Replace(".",","));
if(int.Parse(project.Variables["temp"].Value) == 5) return double.Parse(project.Variables["ndoubleh"].Value.Replace(".",",")) * double.Parse(project.Variables["tenth"].Value.Replace(".",","));
throw new Exception("Не найдена позиция!");
 
Последнее редактирование:
  • Спасибо
Реакции: Анатолий

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)