Ошибка в Zenno при округлении через С#

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 526
Благодарностей
1 323
Баллы
113
Всем доброго времени суток. Случилась одна проблема. У меня есть переменные с цифрами типа (43.423234232) и мне их нужно округлить. Использовав поиск по форуму, нашел С# код, который решает эту проблему, а именно:
C#:
return System.Math.Round(17.63232323, 0);
Но так как у меня значения в переменных - я использовал имя переменной:
C#:
return System.Math.Round({-Variable.get-}, 0);
На удивление - если запускать сразу с этого блока - все работает на отлично. Но достаточно запустить С начала , выдает ошибку при старте ( Проэкт выполнен с ошибкой ):
Компиляция кода Ошибка в действии "CS0839" "Аргумент пропущен". [Строка: 0; Cтолбец: 26]
Как мне исправить ошибку, что бы я свободно мог округлять цифры с переменной? И почему вообще эта ошибка так странно работает?
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 177
Благодарностей
2 184
Баллы
113
C#:
// подробнее о типах - https://metanit.com/sharp/tutorial/2.1.php
// сначала умно конвертим текстовую переменную в число с плавающей точкой:
double Chislo = Convert.ToDouble(project.Variables["usd_start"].Value.Replace(",", "."), System.Globalization.CultureInfo.InvariantCulture);
//Потом уже округляем:
return System.Math.Round(Chislo, 0);
UPD: подправил именно под переменную ТС, а то судя по посту ниже он не поймет никак как там свою подставить.
 
Последнее редактирование:

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 526
Благодарностей
1 323
Баллы
113
Вообще ничего не понял. Вот взял я ваш код и вставил свою переменную:
C#:
double Chislo = Convert.ToDouble(project.Variables["{-Variable.usd_start-}"].Value.Replace(",", "."), System.Globalization.CultureInfo.InvariantCulture);
//Потом уже округляем:
return System.Math.Round(Chislo, 0);
Но блок даже не запустился. Какая точка может быть проблемой, если мой скрипт работает - если запускать сразу блок - при чем тогда тут точка и новый скрипт, который вы скинули? Можно пожалуйста более детально, как же мне вставить переменную в С код , что бы запускалось со старта?



C#:
// подробнее о типах - https://metanit.com/sharp/tutorial/2.1.php
// сначала умно конвертим текстовую переменную в число с плавающей точкой:
double Chislo = Convert.ToDouble(project.Variables["Var4islo"].Value.Replace(",", "."), System.Globalization.CultureInfo.InvariantCulture);
//Потом уже округляем:
return System.Math.Round(Chislo, 0);
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 177
Благодарностей
2 184
Баллы
113
  • Спасибо
Реакции: Phoenix78 и Yuriy Zymlex

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 526
Благодарностей
1 323
Баллы
113
Прежде чем писать, вы должны понимать, я обратился за помощью по конкретному вопросу - что бы получить конкретный ответ. А пожелания что-либо изучить - это в другую рубрику. Так как я проходил по ссылкам примерно тем, что вы дали, но не нашел ответ. И захотел, что бы конкретный ответ помогли найти в моей теме, но вместо ответа, меня посылают туда, откуда я вернулся... Вам не кажется, что раздел Вопросы и обсуждения, именно для этого и предназначены, что бы находить ответы? (Это риторический вопрос)
Прежде чем начинать работу с C# советую чуть изучить азы, посмотреть примеры на форуме в открытых шабах и т.д. И начать с:
как вставить в С# переменную проекта site:zennolab.com
А то у вас там косяк.
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 177
Благодарностей
2 184
Баллы
113
....На удивление - если запускать сразу с этого блока - все работает на отлично. Но достаточно запустить С начала , выдает ошибку при старте ( Проэкт выполнен с ошибкой ):
Как мне исправить ошибку, что бы я свободно мог округлять цифры с переменной? И почему вообще эта ошибка так странно работает?
О, недоглядел. Ругается то оно видать на совсем другой кубик. В логе кликните 2 раза на сообщении с ошибкой и оно наведет курсор на проблемный участок. Вот там вы еще больше накосячили видать.
 
  • Спасибо
Реакции: Phoenix78

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 526
Благодарностей
1 323
Баллы
113
Повторюсь, именно этот кубик и не проходит. Я проверял - достаточно его удалить - все работает. Лог ошибки, тоже копировал и поиск наводит именно на этот же блок. Проблема именно с этим блоком. Если у вас будет желание помочь, вам достаточно скопировать мой код и убедится в том, что кубик работает с переменной, до момента, пока я не захочу запустить полностью весь проэкт. (Удалив кубик - проэкт работает!)
C#:
return System.Math.Round({-Variable.get-}, 0);
О, недоглядел. Ругается то оно видать на совсем другой кубик. В логе кликните 2 раза на сообщении с ошибкой и оно наведет курсор на проблемный участок. Вот там вы еще больше накосячили видать.
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 117
Баллы
113
Вообще ничего не понял. Вот взял я ваш код и вставил свою переменную:
C#:
double Chislo = Convert.ToDouble(project.Variables["{-Variable.usd_start-}"].Value.Replace(",", "."), System.Globalization.CultureInfo.InvariantCulture);
//Потом уже округляем:
return System.Math.Round(Chislo, 0);
Но блок даже не запустился. Какая точка может быть проблемой, если мой скрипт работает - если запускать сразу блок - при чем тогда тут точка и новый скрипт, который вы скинули? Можно пожалуйста более детально, как же мне вставить переменную в С код , что бы запускалось со старта?
Неправильно прописали переменную.
Нужно так:
C#:
project.Variables["usd_start"].Value
return System.Math.Round({-Variable.get-}, 0);
Также и здесь, нужно макрос переменной заменить на синтаксический вариант C# + применить правильный тип данных:
C#:
return System.Math.Round(Convert.ToDouble(project.Variables["get"].Value), 0);
 
Последнее редактирование:
  • Спасибо
Реакции: Yuriy Zymlex

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 518
Благодарностей
3 371
Баллы
113

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 526
Благодарностей
1 323
Баллы
113
Вставил ваш код (имя переменной с цифрой {-Variable.get-}, т.е. переменную вы уже вбили и получилось как в коде снизу) :
C#:
return System.Math.Round(Convert.ToDouble(project.Variables["get"].Value), 0);
Но код не работает - выдает со старту ошибку:
Выполнение действия CSharp OwnCode. Входная строка имела неверный формат.
В переменной находится: 1231.22323

Неправильно прописали переменную.
Нужно так: project.Variables["usd_start"].Value



Также и здесь, нужно макрос переменной заменить на синтаксический вариант C# + применить правильный тип данных: return System.Math.Round(Convert.ToDouble(project.Variables["get"].Value), 0);
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 117
Баллы
113
Но код не работает - выдает со старту ошибку:
В переменной находится: 1231.22323
Тут надо точку заменять на запятую. Выше пример был.
Вот так:
C#:
return System.Math.Round(Convert.ToDouble(project.Variables["get"].Value.Replace(",", "."), System.Globalization.CultureInfo.InvariantCulture), 0);
 
Последнее редактирование:
  • Спасибо
Реакции: orka13 и Gunjubasik

orka13

Client
Регистрация
07.05.2015
Сообщения
2 177
Благодарностей
2 184
Баллы
113
Вставил ваш код (имя переменной с цифрой {-Variable.get-}, т.е. переменную вы уже вбили и получилось как в коде снизу) :
C#:
return System.Math.Round(Convert.ToDouble(project.Variables["get"].Value), 0);
Но код не работает - выдает со старту ошибку:

В переменной находится: 1231.22323
Протому что
52025
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
Прежде чем писать, вы должны понимать, я обратился за помощью по конкретному вопросу - что бы получить конкретный ответ. А пожелания что-либо изучить - это в другую рубрику.
и чем недоволен автор ? полностью готовый ответ был любезно предоставлен в первом же посте.
очень странная реакция на полученные подсказки в каком направлении делать поиск по возникшей проблеме. Автор хочет что бы за него думали, искали инфу на форуме, да еще и готовое решение делали ? ну, ну....
 
  • Спасибо
Реакции: Yuriy Zymlex

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 526
Благодарностей
1 323
Баллы
113
Спасибо большое за помощь. Мне просто было тяжело понять, что (project.Variables["usd_start"].Value.Replace - это уже готовый код, так как раньше не обращал внимание на то, что переменная может иметь другой вид, кроме: {-Variable.usd_start-} . Поэтому, с вашей стороны, более логично было бы ткнуть меня носом в usd_start , так как помочь человеку, отправив его учить азы, перед тем как показать в чем проблема - не совсем верно, в отношении того, кому хотите помочь разобраться в проблеме. Я вот такой тип людей - с 0 учить не очень выходит - когда есть определенная задача - я пытаюсь ее решить , когда нашел ответ - разбираюсь как и что я сделал не так и тем самым учу новое.

 

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