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

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


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

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

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




×
×
  • Создать...