арифметика c#

Регистрация
13.04.2016
Сообщения
650
Благодарностей
53
Баллы
28
использую такой код:
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;
}

тут же подсказали...


вопрос, почему он не считает дробные числа?

2*2 умножает нормально, но если будет 2*0.02 - пишет что входная строка имеет неверный формат.
как это исправить? спасибо!
 

SlipDez

Client
Регистрация
18.07.2018
Сообщения
374
Благодарностей
70
Баллы
28
использую такой код:
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;
}

тут же подсказали...


вопрос, почему он не считает дробные числа?

2*2 умножает нормально, но если будет 2*0.02 - пишет что входная строка имеет неверный формат.
как это исправить? спасибо!
double.Parse напиши вместо Int работаешь же с дробными числами

Когда пишешь int.Parse он обрезает дробную часть

Может иногда выбивать ошибку если используешь запятую вместо точки и наоборот зависит от настроек системы


C#:
double one = double.Parse(project.Variables["one"].Value);
double two = double.Parse(project.Variables["two"].Value);
double result = one * two;
project.SendInfoToLog(result.ToString());
поменяй точку на запятую, запятую на точку в переменных и эта ошибка пропадет
 
Последнее редактирование:
  • Спасибо
Реакции: Анатолий
Регистрация
13.04.2016
Сообщения
650
Благодарностей
53
Баллы
28
double.Parse напиши вместо Int работаешь же с дробными числами

Когда пишешь int.Parse он обрезает дробную часть

Может иногда выбивать ошибку если используешь запятую вместо точки и наоборот зависит от настроек системы


C#:
double one = double.Parse(project.Variables["one"].Value);
double two = double.Parse(project.Variables["two"].Value);
double result = one * two;
project.SendInfoToLog(result.ToString());
поменяй точку на запятую, запятую на точку в переменных и эта ошибка пропадет
ошибка так
 

SlipDez

Client
Регистрация
18.07.2018
Сообщения
374
Благодарностей
70
Баллы
28
синтасис такой

double name_var = double.Parse("тут переменная со значением");

Создаете переменную
C#:
double one;//создание переменной с дробной частью
one = double.Parse("тут значение переменной"); //тип переменной уже объявили
//делаем тоже самое со второй переменной
double two;//создание переменной с дробной частью
two = double.Parse("тут значение переменной"); //тип переменной уже объявили
//выполняем операции и присваиваем значение в результат
double result = one*two;
//можем записать в переменную проекта
project.Variables["название_переменной проекта"].Value = result.ToString(); //так как
//переменные проекта могут хранить только строку поэтому ToString()
может так попонятней. int.Parse это для целых значений
 
Последнее редактирование:
  • Спасибо
Реакции: Анатолий

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 655
Благодарностей
1 320
Баллы
113
Регистрация
13.04.2016
Сообщения
650
Благодарностей
53
Баллы
28
синтасис такой

double name_var = double.Parse("тут переменная со значением");

Создаете переменную
C#:
double one;//создание переменной с дробной частью
one = double.Parse("тут значение переменной"); //тип переменной уже объявили
//делаем тоже самое со второй переменной
double two;//создание переменной с дробной частью
two = double.Parse("тут значение переменной"); //тип переменной уже объявили
//выполняем операции и присваиваем значение в результат
double result = one*two;
//можем записать в переменную проекта
project.Variables["название_переменной проекта"].Value = result.ToString(); //так как
//переменные проекта могут хранить только строку поэтому ToString()
может так попонятней. int.Parse это для целых значений
так тоже ошибка
 

SlipDez

Client
Регистрация
18.07.2018
Сообщения
374
Благодарностей
70
Баллы
28
точку с запятой пропустил и переменная x на объявлена
int x = 1;
или double x = 1,2;

смотря что хранит
 
  • Спасибо
Реакции: Анатолий
Регистрация
13.04.2016
Сообщения
650
Благодарностей
53
Баллы
28
Регистрация
13.04.2016
Сообщения
650
Благодарностей
53
Баллы
28
я прошу прощения, нельзя ли вас попросить поправить этот код как надо, чтобы ещё 3 часа его не мусолить? спасибо!


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;
}
 

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 655
Благодарностей
1 320
Баллы
113
использую такой код:
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;
}

тут же подсказали...


вопрос, почему он не считает дробные числа?

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

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 655
Благодарностей
1 320
Баллы
113
в некоторых случаях (процентов 20 ) этот код в переменную пишет "ок" вместо результата, работая многопоточно...
он будет писать ок в том случае когда значение в переменной х не соответствует не одному из ваших case, у вас же нету обработки по дефоулт, вот оно и выходит по ok
 
  • Спасибо
Реакции: Анатолий

SlipDez

Client
Регистрация
18.07.2018
Сообщения
374
Благодарностей
70
Баллы
28
в некоторых случаях (процентов 20 ) этот код в переменную пишет "ок" вместо результата, работая многопоточно...
Используйте default:
int x=1;
switch (x)
{
    case 1:
        project.SendInfoToLog("1");
        break;
    case 2:
        project.SendInfoToLog("2");
        break;
    case 3:
        project.SendInfoToLog("3");
        break;
    case 4:
        project.SendInfoToLog("4");
        break;
    default :
        
        project.SendInfoToLog("значение неизвестно"); //тут то что вы хотите сделать
        //если значение ни одно из перечисленных
        break;
}
 
  • Спасибо
Реакции: Анатолий

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