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

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


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

Облазил похожие разделы ну так и не нашел ответа, толи лыжи не едут. В общем нужно заставить формулу округлять до целого большего значения. Пример 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 пользователей

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




  • Сообщения

    • Ветерок
      Зачем это нажимать? Лучше нажать проецировать кривую. Как выяснилось :) такая функция есть. @mannul даже файл выложил - бери и смотри/повторяй.
    • Stanislav
      Относительно POP and PUP в фале постпроцессора вот такое нашел для POP прослеживается возростающая закономерность, а вот для  PUP не ясно почему прыгает значение. # POP and PUP functions for initialization. H parameters are used to  # # get the correct POP and PUP values. If the thickness of the sheet   # # is between the minimum and maximum thickness, the postprocessor     # # will use POP and PUP parameters to write them in the PS file.       # # Example: H000 0.0 1.0 30000 25000                                   # #                                                                     # #     Minimum      Maximum       POP        PUP                       # #    Thickness    Thickness     Value      Value                      # #---------------------------------------------------------------------# H001    0.0          0.5        14000      9000 H002    0.51         1.0        14500      9000 H003    1.01         1.5        15000      9000 H004    1.51         2.0        15500      9000 H005    2.01         2.5        16000      8500 H006    2.51         3.0        16500      8000 H007    3.01         3.5        17000      8000 H008    3.51         4.0        17500      8000 H009    4.01         4.5        18000      9000 H010    4.51         5.0        18500      8000 H011    5.01         5.5        19000      9000 H012    5.51         6.0        19500      8000
    • Krusnik
      Да там же ничего сложного.   Делаете вашу спираль.   Потом делаете эскиз. В эскизе нажимаете Преобразование объектов и тыкаете на созданную спираль.   Нажимаете поверхность вытянуть и выбираете только что созданный эскиз. В опциях вытягивание ставите "До поверхности". И вытягиваете спиральку до вашего купола.   И последний шаг - вырез по траектории. Думаю с этим вы без моих советов справитесь.   Лишнее скрываете и вуаля.  
    • IgP
      Это, конечно, да, не хорошо ... Но и конструктор не бог чтобы всё знать ... Для этого есть и д.б. этап "технологическая проработка", со всеми вытекающими.
    • arsenev
      Спасибо за ответ. Нет, в видео он говорит, что это такая стратегия. Пробовал использовать шаблон и обрабатывать его со смещением, получается не то (именно, когда нужно обработать цилиндрическое отверстие). Лучше отводится стружка и не мешает резанию. (см. видео, где-то с 18 минуты).
    • scrimline
      Если ещё нужна информация, fanuc oi-tf станок akira-seiki, М14 на опускание руки, для привязки и М15 для поднятия
    • Богоманшин Игорь
      Эта проблема от незнания некоторыми конструкторами технологических особенностей порошковой окраски. Максимум на чертеже научатся указывать РАЛ и толщину слоя. А необходимо предусмотреть места подвеса, можно туда шпильки или гайки запрессовать в нужных местах.
    • MagicNight
      Добрый день! Обратил внимание, что стал шуметь (свистеть) шпиндель станка, причём на всех режимах. Я так понимаю, что полетели подшипники. Хотим найти их, но не знаем как они называются, может у кого-то было подобное? Ну и отремонтировать своими силами. Станок швейцарский Mikron UCP-710 пятиосевой.  
    • maxx2000
      это не одно и тоже что и создать шаблон? А если мне нужен будет документ без зон?
    • IgorT
      Может быть уточнить надо?  Достаточно в шаблоне, который используется для создания чертежа, включить эти самые зоны.
×
×
  • Создать...