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

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


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

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

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




  • Сообщения

    • Guhl
      Они дураки, не знают про коррекции просто (сарказм) :) Когда @gudstartup произносит что-то типа "вы не понимаете" или "вы же понимаете" мне почему-то сразу вспоминается этот фрагмент   
    • Killerchik
      Господа, Вы все по-своему правы, как мне кажется. Виктор прав в том, что при описанном им отклонении будет невозможно сделать ось шпинделя перпендикулярной к поверхности детали, прижатой к столу, хоть убейся. Если это 3д фрезеровака - по барабану, а вот если надо расточить отверстие или обработать точную поверхность торцом фрезы (или шлифовального круга, шлифование на фрезерных ОЦ давно не что-то невероятное) - мы получаем неисправимое искажение.   Конечно, на хороших станках и физическую геометрию станины стараются делать хорошо. Но хорошо - это не отлично, а ещё её ведёт со временем, а ещё есть удары и т.п. Тут-то и приходит на помощь коррекция всех мастей. пиэс - работники Блом'а как выяснилось вручную подшлифовывают плоскости под рельсами брусками с наждачкой по результатам замеров))))) В видосе от Титанов это было.
    • gudstartup
      я вам все написал . вы же b компенсируете вот и вводите относительно наклона в заданной точке значения отклонений хоть по x и хоть по  y и ваша точка на оси сместится в пространстве. таблица компенсаций это позволяет. точки для оси b задаются от +90 0 -90 или как сами хотите 
    • Viktor2004
      Вот в моем примере надо задать смещение оси X в зависимости от Y. Но при B-90 это смещение должно быть в одну сторону, а при B+90 в другую сторону. А в промежутке между B-90---------B+90 значения смещения Х между этими крайними Значит компенсация X в зависимости от Y должна зависеть еще и от наклона оси В Ну и как будем компенсировать?
    • gudstartup
      вы понимаете что такое объемная компенсация? можно задать смещение точки вашего стола во всех плоскостях и станок это отработает переместив  на заданную величину оси х у или z  перемещая стол вы вообще не увидите больших отклонений. естественно все зависит от качества измерения и правильности ввода. лучше когда это делает специальная программа
    • Viktor2004
      хорошо. Представьте ситуацию 1. Ось В=0. двигаем индикатором по Х и Y все идеально ровно 2. Ось B=-90 ведем индикатором по Y вдоль стола. Отклонение в + (существенное) в сторону +X 3. Ось B=+90 ведем индикатором по Y вдоль стола. Отклонение в - (существенное) в сторону -X делаем вывод. стол не параллелен оси наклона Как будем компенсировать?
    • gudstartup
      если есть нормальный цикл для щупа и геометрия выравнена и соответствует кинематике то настройка = времени исполнения этого цикла. буржуи вообще этот цикл гоняют перед каждой высокоточной деталью и имеют прекрасную повторяемость точности. так надо уметь проводить измерения и иметь для этого соответствующие приборы.  вычисляется смещение оси в заданной точке и смещение осей влияющие на ее взаимную перпендикулярность. не видел там никаких формул. только недавно компенсировали ось А на пятиосевом хайдене и без формул обошлись.  согласен с тем что измерения пятиосевого продлятся дольше 
    • Viktor2004
      Я не смог. На Хенденхайне, где все компенсации очень наглядны и открыты. Трехосевой скомпенсировать можно, пятиосевой у меня не получилось. Потому что в значения компенсаций надо писать формулы, а оно позволяет писать туда только константы. А формулы оно туда писать не умеет
    • gudstartup
      тяжесть это отсутствие высокоскоростной обработки и трудоемкость. особенно если делать это с помощью индикатора и линейки станкостроители именно так и работают!
    • Guhl
      Там и прямой станок настроить непросто, а уж кривой, так хоть стреляйся 
×
×
  • Создать...