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

Регистрация
13.04.2016
Сообщения
660
Реакции
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 - пишет что входная строка имеет неверный формат.
как это исправить? спасибо!
 
использую такой код:
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());

поменяй точку на запятую, запятую на точку в переменных и эта ошибка пропадет
 
Последнее редактирование:
  • Спасибо
Реакции: Анатолий
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());

поменяй точку на запятую, запятую на точку в переменных и эта ошибка пропадет
ошибка так
 
синтасис такой

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 это для целых значений
 
Последнее редактирование:
  • Спасибо
Реакции: Анатолий
синтасис такой

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 это для целых значений
так тоже ошибка
 
точку с запятой пропустил и переменная x на объявлена
int x = 1;
или double x = 1,2;

смотря что хранит
 
  • Спасибо
Реакции: Анатолий
я прошу прощения, нельзя ли вас попросить поправить этот код как надо, чтобы ещё 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;
}
 
использую такой код:
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
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;
}
огромное спасибо!
 
в некоторых случаях (процентов 20 ) этот код в переменную пишет "ок" вместо результата, работая многопоточно...
 
в некоторых случаях (процентов 20 ) этот код в переменную пишет "ок" вместо результата, работая многопоточно...
он будет писать ок в том случае когда значение в переменной х не соответствует не одному из ваших case, у вас же нету обработки по дефоулт, вот оно и выходит по ok
 
  • Спасибо
Реакции: Анатолий
в некоторых случаях (процентов 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;
}
 
  • Спасибо
Реакции: Анатолий

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