Страницы: 1
RSS
Алгоритм округления чисел, Как запрограммировать exсel на нужное округление
 
Вопрос такого плана, мне необходимо произвести расчёты, с округлением, принятым для формул геодезии. Там округление работает таким образом, если после запятой больше 5 - в большую сторону, если меньше 5 - в меньшую. НО если число после запятой равно 5, то число округляется в большую сторону, ЕСЛИ оно - нечётное, и в меньшую, ЕСЛИ оно - чётное. При этом если число после запятой, например, 2.500001, то число уже округляется в большую сторону хоть и чётное, т.к. после запятой не ровно 5.  Примеры округлений:
1,5=2;
2,5=2;
2,501=3;
-1,5= -2;
-2,5= -2.
Вот такой вопрос отсюда вытекает, как настроить excel, чтобы он работал по такому алгоритму?
Изменено: Дружинник Ильич - 01.03.2022 13:09:56
 
Excel не настроите, а формулу написать можно
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
написал:
Excel не настроите, а формулу написать можно
Можно тогда узнать, что за формула?
 
проверяйте:
Код
=ЕСЛИ(ОСТАТ(ЦЕЛОЕ(A1*10);5)=0;ЦЕЛОЕ(A1)+ИЛИ(ОСТАТ(ЦЕЛОЕ(A1);2);ЦЕЛОЕ(A1*10)<A1*10);ОКРУГЛ(A1;))
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
ну или простой макрос
Код
Public Function округл2(x#, Optional dx% = 0)
округл2 = Round(x, dx)
End Function


Вдруг округлять надо будет до первого/второго/энн-ного знака после запятой. Достаточно будет указать сколько знаков оставить
Изменено: tutochkin - 01.03.2022 13:51:37
 
Цитата
написал:
проверяйте
О, спасибо большое, 2 года в ручную округлял такие места :)
Подскажите, а вот этой всей формуле можно дать отдельное название, чтоб можно было просто прописать, например, "=ГОКР("
 
Цитата
Дружинник Ильич написал:
Подскажите, а вот этой всей формуле можно дать отдельное название, чтоб можно было просто прописать, например, "=ГОКР("
Код
Public Function ГОКР(x#, Optional dx% = 0)
ГОКР = Round(x, dx)
End Function


Легко :)
 
Цитата
написал:
Легко
Спасибо огромное, такой простой макрос столько проблем решает)
Всё работает. С макросами никогда не работал, но оказалось это не сложно :D :D  :D  
 
Цитата
Дружинник Ильич: с округлением, принятым для формул геодезии
гораздо более известно под прилагательным "банковское" [округление]

Цитата
Дружинник Ильич: такой простой макрос
он просто перенёс работу штатной VBA-функции Round на лист  :D
Изменено: Jack Famous - 01.03.2022 15:28:25
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
так в нём от  tutochkin  он просто перенёс работу штатной VBA-функции Round на лист  
Именно так. А я и не претендовал на лавры. Более того о разнице WorksheetFunction.Round и Round узнал от вас :)
Подчас только страх перед словом "макросы" мешает использовать простые решения.
 
Небольшая просьба - по возможности, не использовать в макросах нелатинские буквы (кроме комментариев). Иначе гарантировано будут проблемы, если Ваш файл откроют на компьютере с кодовой страницей по умолчанию, отличной от windows-1251.
Владимир
 
Цитата
tutochkin: я и не претендовал на лавры
да я ж не в укор, а чтобы ТС понял, что там никакого алгоритма нет (вшит в штатную функцию)  ;)
Изменено: Jack Famous - 01.03.2022 15:30:00
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
написал:
Небольшая просьба - по возможности, не использовать в макросах нелатинские буквы
Хорошо, спасибо за совет)
Цитата
написал:
он просто перенёс работу штатной VBA-функции Round на лист
Если б я хоть слово из этого понял 8-0 ))
 
Еще формульный вариант, по аналогии с формулой от Ігор Гончаренко:
Код
=ЕСЛИ(ОСТАТ(A1*10;5)=0;ЗНАК(A1)*ОКРУГЛТ(ABS(A1);2);ОКРУГЛ(A1;0))
 
Цитата
Дружинник Ильич: Если б я хоть слово из этого понял
в VBA есть все функции листа (функции, которые вы пишете в ячейках, начиная после "="), а также много VBAшных функций, аналогов которых нет на листе
    Одна из таких функций, как раз VBA.Round(), которая (несмотря на обычное название) использует совсем не математическое общепринятое округление, а банковское и многие из-за незнания этого факта получают некорректные данные.
    tutochkin, просто "перенёс" её (дал возможность вызывать) на лист в виде макрофункции
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Наверх