Перейти к публикации

Округление функции до большего значения


Рекомендованные сообщения

Облазил похожие разделы ну так и не нашел ответа, толи лыжи не едут. В общем нужно заставить формулу округлять до целого большего значения. Пример 250/200=1,25 программа округляет до 1 но это не устраивает нужно получить 2 (именно большие). Записал уравнение в виде =ROUND ( "h" / 200 ), как добиться нужного результата не понимаю.

Ссылка на сообщение
Поделиться на других сайтах


UnPinned posts
1 час назад, Orya сказал:

Облазил похожие разделы ну так и не нашел ответа, толи лыжи не едут. В общем нужно заставить формулу округлять до целого большего значения. Пример 250/200=1,25 программа округляет до 1 но это не устраивает нужно получить 2 (именно большие). Записал уравнение в виде =ROUND ( "h" / 200 ), как добиться нужного результата не понимаю.

А типа такого не пройдет?

=ROUND ( "h" / 200 + 0,5 )

Ссылка на сообщение
Поделиться на других сайтах
8 минут назад, brigval сказал:

А типа такого не пройдет?

=ROUND ( "h" / 200 + 0,5 )

В этом случае да, но глобально нет, если при деление получается целое число, то это +0,5 уже становиться дробным.

С горем-пополам нашел решение на англоязычном форуме, надо интегралом через 2 формулы, тогда округляет вверх.

x = "h" / 200

n =  IIF ( "x" - int ( "x" ) > 0 , int ( "x" ) + 1 , "x" )

Вот такая формула делает правильно то, что нужно)

 

Ссылка на сообщение
Поделиться на других сайтах
9 минут назад, Orya сказал:

В этом случае да, но глобально нет, если при деление получается целое число, то это +0,5 уже становиться дробным.

 

Дробное, конечно, вы его и затем округляете потом.

Для практических целей вполне может сойти не 0,5, а 0.49999

Если после деления будет получаться целое число, то после округления это целое число и останется.

Не настаиваю, разумеется, просто заметил.

 

12 минут назад, Orya сказал:

надо интегралом

))

Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, Orya сказал:

x = "h" / 200

n =  IIF ( "x" - int ( "x" ) > 0 , int ( "x" ) + 1 , "x" )

Вот такая формула делает правильно то, что нужно)

Как-то наворочено, почему бы не сделать так:

n = Abs(Int(-x))

или даже так:

n = -Int(-x)

Цитата

Int Function, Fix Function Example

This example illustrates how the Int and Fix functions return integer portions of numbers. In the case of a negative number argument, the Int function returns the first negative integer less than or equal to the number; the Fix function returns the first negative integer greater than or equal to the number.




MyNumber = Int(99.8)    ' Returns 99.
MyNumber = Fix(99.2)    ' Returns 99.
MyNumber = Int(-99.8)    ' Returns -100.
MyNumber = Fix(-99.8)    ' Returns -99.
MyNumber = Int(-99.2)    ' Returns -100.
MyNumber = Fix(-99.2)    ' Returns -99.

 

3 часа назад, Orya сказал:

Записал уравнение в виде =ROUND ( "h" / 200 )

Эта функция хитро считает (например округление до чётного и т.п. особенности), особенности описаны здесь:

https://www.techonthenet.com/excel/formulas/round_vba.php

 

Изменено пользователем Kelny
Ссылка на сообщение
Поделиться на других сайтах
58 минут назад, Kelny сказал:

Как-то наворочено, почему бы не сделать так:

n = Abs(Int(-x))

или даже так:

n = -Int(-x)

 

 

Так это округляет в меньшую сторону, а если нужно в большую)

Ссылка на сообщение
Поделиться на других сайтах
Только что, Orya сказал:

Так это округляет в меньшую сторону, а если нужно в большую)

Дописать +1. n=Abs(Int(-x))+1

Ссылка на сообщение
Поделиться на других сайтах
8 минут назад, malvi.dp сказал:

Дописать +1. n=Abs(Int(-x))+1

Да, это работает в конкретном случае, если для решения опредиленно

9 минут назад, malvi.dp сказал:

Дописать +1. n=Abs(Int(-x))+1

Работает для этой конкретной задачи, как вариант подходит, но если x будет равен целому числу то к нему добавиться +1 т.е. 400/2 = 2+1=3, что в конкретном случае не подходит.

Ссылка на сообщение
Поделиться на других сайтах
23 минуты назад, Orya сказал:

Так это округляет в меньшую сторону, а если нужно в большую)

Правильно - в меньшую. А куда уменьшится отрицательное число? Не спроста там минус и выписка из справки:

1 час назад, Kelny сказал:

MyNumber = Int(-99.2) ' Returns -100.

 

 

20 минут назад, malvi.dp сказал:

Дописать +1. n=Abs(Int(-x))+1

Попробовали? Какой результат?

 

11 минут назад, Orya сказал:

т.е. 400/2 = 2+1=3, что в конкретном случае не подходит.

Странная у вас математика.

Изменено пользователем Kelny
Ссылка на сообщение
Поделиться на других сайтах
13 минут назад, Kelny сказал:

Попробовали? Какой результат?

 

Правильно считает так:

x = "h" / 200

n =  IIF ( "x" - int ( "x" ) > 0 , int ( "x" ) + 1 , "x" )

т.е. тут при получении любого дробного числа округляет в большую сторону, если число целое, то оно целым и остается, в вашем примере дробные округляет в большую сторону, ну а если число получилось целое, то к нему добавляет 1

 

14 минут назад, Kelny сказал:

 

 

Странная у вас математика.

Прошу прощения, тут опечатка - 400/200=2 +1 (из вашей функции) получаем 3. Т.е. вместо целого числа 2 получается 3). А вот если скажем 450/200=2,25 +1 (из вашей функции) то получаем 3 - правильно.

Еще раз - x=h/200, т.е. h - величина переменная и может быть любой, а вот 200 - величина постоянная, в общем ваш вариант работает только на дробное значение.  

5 минут назад, malvi.dp сказал:
  Скрыть содержимое

изображение_2022-02-17_170230.png

 

В вашем примере это работает, но если у вас x=400, то y=401.

Вся соль в том, что x-величина переменная и может быть, как целым, так и дробным 

Ссылка на сообщение
Поделиться на других сайтах

@malvi.dp очень странно - похоже на глюк, это обычные функции VBA и в этом самом VBA показывает правильный результат.

Уравнение топикстартера проглатывает без ошибок?

А если заменить Abs на минус?

А если вместо X число вписать?

А если Abs и Int с маленькой буквы написать?

Попробуйте в макрос VBA впихнуть Debug.Print Abs(Int(-99.002)).

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

image.png

 

31 минуту назад, Orya сказал:

Правильно считает так:

Так и с теми функциями должен считать правильно, ведь это такие же функции VBA как и IIF, которые можно использовать в уравнениях, но как показывает картинка выше почему-то не у всех.

Изменено пользователем Kelny
Ссылка на сообщение
Поделиться на других сайтах
25 минут назад, Kelny сказал:

 

 

Так и с теми функциями должен считать правильно, ведь это такие же функции VBA как и IIF, которые можно использовать в уравнениях, но как показывает картинка выше почему-то не у всех.

Не знаю как картинку вставить, попробуйте по ссылке посмотреть, что получается https://cccp3d.ru/gallery/image/3691-функцияpng/?context=new

Ссылка на сообщение
Поделиться на других сайтах
20 минут назад, Orya сказал:

Не знаю как картинку вставить, попробуйте по ссылке посмотреть, что получается https://cccp3d.ru/gallery/image/3691-функцияpng/?context=new

Картинку скопировать в буфер и вставить. На картинке что и выше показал @malvi.dp

 

@Orya @malvi.dp Разобрался, эти деятели из DS перемудрили в уравнениях последних версий Solidworks и если использовать INT в константах, то считает какую-то ахинею (минус не учитывается, что противоречит правильной работе функции INT в VBA).

В VBA всё считает правильно.

А вот если это же привязать не к константе, а например к размеру (например, через значение связи), то формула уже считает правильно.

 

ТАК ЧТО НЕ ИЗВЕСТНО, что он может выкинуть при расчётах в формулах при использовании последней версии программы Solidworks.

Изменено пользователем Kelny
Ссылка на сообщение
Поделиться на других сайтах

@malvi.dp @Orya Чудны уравнения в последних версиях (и это с последними обновлениями и больше уже похоже не будет), самый прикол когда в уравнении одно значение, а на размере другое и обрабатывая одно выражение разный результат для разных размеров (для связанного размера одно, а если просто для размера или глобальной переменной написать тоже самое выражение, то другое):

image.png

Ссылка на сообщение
Поделиться на других сайтах

 

 

16 часов назад, Orya сказал:

n =  IIF ( "x" - int ( "x" ) > 0 , int ( "x" ) + 1 , "x" )

И всё же можно немного сократить убрав вычитание и сравнение с нулём:

n =  IIF ( "x" > int ( "x" ) , int ( "x" ) + 1 , "x" )

 

 

Изменено пользователем Kelny
Ссылка на сообщение
Поделиться на других сайтах
41 минуту назад, Kelny сказал:

 

 

И всё же можно немного сократить убрав вычитание и сравнение с нулём:

n =  IIF ( "x" > int ( "x" ) , int ( "x" ) + 1 , "x" )

 

 

Ну да, так тоже работает правильно

Ссылка на сообщение
Поделиться на других сайтах
  • 9 месяцев спустя...

А можно ли округлить не до целого, а до одного знака после запятой (желательно тоже в большую сторону)?

Ссылка на сообщение
Поделиться на других сайтах
13 часов назад, Ветерок сказал:

А можно ли округлить не до целого, а до одного знака после запятой (желательно тоже в большую сторону)?

Можно, как вариант умножать и делить на десятки (для первода в целые и возврата запятой после округления), но в последних версиях есть глюки в уравнениях:

https://cccp3d.ru/topic/134714-округление-функции-до-большего-значения/?do=findComment&comment=1304146

 

12 часов назад, Ветерок сказал:

И почему-то не воспринимает функцию ANINT, хотя в Справке она описана.

А оно разве для уравнений?

Вроде в другом разделе описано:

Цитата

 

Исследования движения > Элементы движения > Ввод выражений и функций > Поддерживаемые функции

https://help.solidworks.com/SearchEx.aspx?query=ANINT&version=2010&lang=Russian,enu&prod=SolidWorks

 

 

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




  • Сообщения

    • gudstartup
      вы тоже думаете что можно все компоненты чпу заменить и ничего не изменится и предупреждение о том чтобы oprminf не восстанавливали на другой машине которое фанук встроил даже в загрузчик это просто алармисткий текст и ничего не будет..... ну и ну и где написано что она mate как например здесь с чего тогда базовый чпу mate если гл.плата не mate мне непонятно из-за экрана что ли
    • статист
      Охренеть, ни за что бы не догадался. Хоть бы словом где обмолвились об этом в документации. Короче нужна команда EMODIF, E_ID, 3, N_ID где E_ID - номер элемента, который мы собираемся модифицировать. Так как используется BEAM188, то у него не два узла оказывается рассматривается, а три, где первые два принадлежат элементу, а третий узел - направляющий. И соответственно число 3 - это номер узла балки, который мы собираемся модифицировать, то есть направляющий узел. И мы этот узел соответственно заменяем на узел с номером N_ID. И тогда сечение реально вращается. Разобрался по этому видео.    
    • Александр1979
      Материнка такая в руководстве есть. На 0i-D я менял материнку, опции не слетели. 
    • gudstartup
      @Viktor2004 кстати конкретно модели автора в руководстве нет хотя оно последней редакции 18 года
    • Viktor2004
      конкретно на этой не менял. На каких менял, написал выше
    • gudstartup
      какие платы и на каких системах вот в чем ворос конкретно на этой возникут проблемы
    • Viktor2004
      ну да. А то что я менял платы это мои бредовые фантазии   Ну исправили в паспорте. И что?
    • gudstartup
      это догадки и гадание на кофейной гуще а япривожу документ где написано про то что прочитайте пункт 4.11 а там представляете вот что 4) Замена печатной платы может привести к изменению идентификационного номера ЧПУ. Проверьте это на Экран ЧПУ. Если оно отличается от описанного в техническом паспорте, исправьте его.  
    • Viktor2004
      я менял все платы. И на форуме наверное не я один их менял. И никто еще не писал что при этом у него слетел сертификат Возможно ID номера проверяются только в момент установки опции, а когда они уже установлены и мирно хранятся в OPRM INF возможно ти уже на ID наплевать
    • gudstartup
      для кого это написано CAUTION Before replacing a printed circuit board, be sure to read Section 4.11, “OPTION INFORMATION FILE” to confirm the procedure.  
×
×
  • Создать...