Найти тему
Dynasaur

Dynamo: особенности округления.

Оглавление

При работе с инструментом Dynamo есть интересная особенность с округлением и сегодня мы с вами ее разберем.

Dynamo округляет верно, по своему верно.
Dynamo округляет верно, по своему верно.

Мы с вами привыкли к математическому округлению, ему еще нас учили в школе, поэтому для нас правильно округлить 2.5 до 3.

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

На ваш вопрос зачем вообще придумали такое округление отвечу: для статистики! Дело в том что в случае с математическим округлением мы округляем в меньшую сторону 4 значения (1, 2, 3, 4) и в большую 5 (5, 6, 7, 8, 9), как вы видите получается не совсем честная картина. Банковское округление делает округление статистически верным, что важно для бухгалтеров........СТОП!

НО МЫ ИНЖЕНЕРЫ-СТРОИТЕЛИ!

Давайте смотреть, как вернуться к такому родному математическому округлению.

Нам необходимо прибегнуть к Python, для этого вбейте в поисковой строке Python Script. Не переживайте строчка кода совсем маленькая.

  • OUT = round (IN[0], IN[1]).
IronPython основан на 2 версии Python, а там было математическое округление.
IronPython основан на 2 версии Python, а там было математическое округление.
  • IN[0] - значение или группа значений (подобное будет решаться через циклы), которые мы хотим округлить.
  • IN[1] - до какого знака после запятой будет происходить округление.

В Dynamo, который поставляется совместно с Revit 22 появилась возможность переключения версий языка Python. В 3 версии Python округление работает по банковскому правилу, то есть мы возвращаемся к тому же НОДу "Math.Round"

Вы всегда можете переключить на язык прошлой версии.
Вы всегда можете переключить на язык прошлой версии.

В скрипте могут уживаться НОДы Python Script 2 и 3 версии, но если в будущем не будет возможности воспользоваться переключением, то покажу вам "костыль" выглядит ужасно, работает просто:

Значение Python Script выдает верное, в отличии от стандартного НОДа.
Значение Python Script выдает верное, в отличии от стандартного НОДа.

Хитрость крайне проста, к нашему числу мы прибавляем очень малое значение. В программировании множество решений, возможно именно вы найдете лучшее.

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

Информацию об обновление статей вы можете прочитать в Телеграмм канале "Dynasaur".