Jump to content

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


Recommended Posts

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

Link to post
Share on other sites


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

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

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

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

Link to post
Share on other sites
8 минут назад, brigval сказал:

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

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

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

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

x = "h" / 200

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

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

 

  • Нравится 1
Link to post
Share on other sites
brigval
9 минут назад, Orya сказал:

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

 

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

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

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

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

 

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

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

))

Link to post
Share on other sites
Kelny
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

 

Edited by Kelny
  • Нравится 1
Link to post
Share on other sites
58 минут назад, Kelny сказал:

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

n = Abs(Int(-x))

или даже так:

n = -Int(-x)

 

 

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

Link to post
Share on other sites
malvi.dp
Только что, Orya сказал:

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

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

Link to post
Share on other sites
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, что в конкретном случае не подходит.

Link to post
Share on other sites
Kelny
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, что в конкретном случае не подходит.

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

Edited by Kelny
  • Нравится 1
Link to post
Share on other sites
malvi.dp
17 минут назад, Kelny сказал:

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

Скрытый текст

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

 

Link to post
Share on other sites
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-величина переменная и может быть, как целым, так и дробным 

Link to post
Share on other sites
Kelny

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

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

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

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

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

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

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

image.png

 

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

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

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

Edited by Kelny
Link to post
Share on other sites
25 минут назад, Kelny сказал:

 

 

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

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

Link to post
Share on other sites
Kelny
20 минут назад, Orya сказал:

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

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

 

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

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

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

 

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

Edited by Kelny
  • Нравится 4
Link to post
Share on other sites
Kelny

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

image.png

  • Нравится 5
Link to post
Share on other sites
Kelny

 

 

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

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

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

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

 

 

Edited by Kelny
  • Нравится 1
Link to post
Share on other sites
41 минуту назад, Kelny сказал:

 

 

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

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

 

 

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

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.




  • Сообщения

    • streamdown
      Сам такое делал по совету дедушек)) Но не могу найти допустимость такого в ЕСКД. Подскажите, есть ли хоть какие правила добавления примечания в спецификацию, которое НЕ связано с каким либо специфицируемым элементом?   Вот так, к примеру, работает примечание если оно ПРИВЯЗАНО к какому либо специфицируемому элементу  
    • esergey
      Хорошо что движуха пошла по данному вопросу ... Вопросы : если кто то застопорился на 11 ТС  - он как то плохо работает ?  или он не дает предприятию или частнику какому то  исполнить свои наработки и задумки ?  и если вышли 13 или 13+ версии ТС - для работающих в стране это что то меняет ?  и почему работать в ТС 11  это тупиковый путь , это обеспечение не дает что то кому то реализовать из заявленного потенциала ?   
    • KsunReh
      @BorC , вы думаете что все с ходу знают что такое шликер? Лучше покажите качественное фото аналога, на живом изделии и линия разъема будет видна и уже обсудить можно. на картинке у вас просто кусок спирали с непонятными размерами... она полая или цельная?  
    • lexx174
      почему не открытая? Сужу по данным от знакомых, работающих в разных отраслях. И как этот вопрос может быть закрытым, если давно есть официальное распоряжение правительства о переходе на отечественное ПО. Оборонные и около оборонные предприятия однозначно попадают под эти требования. Где-то уже были проведены демонстрации и составлены дорожные карты, где-то внедрен частично определенный функционал на отечественном ПО.   Логика простая - оставаться на западном ПО с учетом отсутствия доступа к обновлениям и актуальным версиям - тупиковый путь. Возьмите тот же TC  и NX , NX какие последние версии вышли? А многие до сих пор даже 12го не пробовали. TC уже 13й есть, если не 13+, а многие застопорились на 10/11.
    • Udav817
      Как вариант - у каждого провода меню ПКМ "Показать/скрыть для компонента" и там отключать трассы. Но это хорошо, когда проводов мало.
    • MFS
      Под какую КСС хотите, силикон потом будете лить или ПК?
    • Nikon6260
    • IgP
      А можно поподробнее про: "многие" - это .... ? "переходят" - что конкретно делается ? Хотя, по моему мнению, это не очень-то и открытая информация, чтобы её как-то здесь озвучивать ...
    • IgP
    • rip13
      Здравствуйте. Требуются услуги расчетчика оптических систем. Нужно более равномерно перераспределить плотность светового потока от светодиода в полусфере. Кому интересно прошу писать в личку.
×
×
  • Create New...