Не используют банковское округление только функции ЧЁТН и НЕЧЁТ
Не знаю в Excel ни одной функции, которая бы использовала банковское округление (в VBA банковское округление использует функция Round(), в отличии от функции листа ОКРУГЛ(), которая округляет по правилам математики)
Quote (Полковник МВД)
Их можно заменить на 26 символов легко. Меньше - сложно
24: =МИН(ЧЁТН(A1);НЕЧЁТ(A1))
25: =ОТБР(A1)+(ОСТАТ(A1;1)>0)
но вопрос решается по другому
Quote (Полковник МВД)
Не используют банковское округление только функции ЧЁТН и НЕЧЁТ
Не знаю в Excel ни одной функции, которая бы использовала банковское округление (в VBA банковское округление использует функция Round(), в отличии от функции листа ОКРУГЛ(), которая округляет по правилам математики)
Quote (Полковник МВД)
Их можно заменить на 26 символов легко. Меньше - сложно
Дата: Понедельник, 01.10.2012, 22:12 |
Сообщение № 23
Группа: Гости
Quote (MCH)
Не знаю в Excel ни одной функции, которая бы использовала банковское округление
Извиняюсь, конечно математическое, а не банковское. ЧЁТН и НЕЧЁТ округляют по другим правилам (всегда в большую сторону), но с ними 12 символов не выйдет
Quote (MCH)
Не знаю в Excel ни одной функции, которая бы использовала банковское округление
Извиняюсь, конечно математическое, а не банковское. ЧЁТН и НЕЧЁТ округляют по другим правилам (всегда в большую сторону), но с ними 12 символов не выйдетПолковник МВД
Ну тогда выкладываю решение, т.к. двое (Gustav и _Boroda_) уже правильно ответили, а остальные не могут не догадатся после последней подсказки: =-ЦЕЛОЕ(-A1)
Quote (vikttur)
Где нашел? Может, указатель какой?
Придумал сам, возможно где то видел, но не в Excel, т.к. данная идея родилась давным давно, возможно это распространненый прием в языках программирования начального уровня типа Basic и т.п., где нет функций Round().
В детстве (т.е. давным давно), когда программировал на Basic для округления по правилам математики (до ближайшего целого) использовал стандартный прием y=Int(x+0.5) Я и в Excel так всегда округлял =ЦЕЛОЕ(A1+0,5) пока мне не подсказали что есть функция ОКРУГЛ(), и что ей удобнее округлять, Хотя с помощью ЦЕЛОЕ можно округлять как вниз так и вверх, так и до ближайшего.
Подобный прием округления вверх я уже использовал на форумах, странно, что Сергеи (оба и Serge007 и ZORRO2005) не обратили внимания на формулу, хотя были участниками в теме Округление значения до нечётного числа, кроме на соседнем форуме.
А здесь обсуждалась реализация функции ОКРУГЛВВЕРХ на VBA
Ну тогда выкладываю решение, т.к. двое (Gustav и _Boroda_) уже правильно ответили, а остальные не могут не догадатся после последней подсказки: =-ЦЕЛОЕ(-A1)
Quote (vikttur)
Где нашел? Может, указатель какой?
Придумал сам, возможно где то видел, но не в Excel, т.к. данная идея родилась давным давно, возможно это распространненый прием в языках программирования начального уровня типа Basic и т.п., где нет функций Round().
В детстве (т.е. давным давно), когда программировал на Basic для округления по правилам математики (до ближайшего целого) использовал стандартный прием y=Int(x+0.5) Я и в Excel так всегда округлял =ЦЕЛОЕ(A1+0,5) пока мне не подсказали что есть функция ОКРУГЛ(), и что ей удобнее округлять, Хотя с помощью ЦЕЛОЕ можно округлять как вниз так и вверх, так и до ближайшего.
Подобный прием округления вверх я уже использовал на форумах, странно, что Сергеи (оба и Serge007 и ZORRO2005) не обратили внимания на формулу, хотя были участниками в теме Округление значения до нечётного числа, кроме на соседнем форуме.
А здесь обсуждалась реализация функции ОКРУГЛВВЕРХ на VBAMCH
Сообщение отредактировал MCH - Вторник, 02.10.2012, 17:56
В детстве (т.е. давным давно), когда программировал на Basic
В то же самое время, которое у меня совпало с юностью (я несколько постарше), варился в тех же ощущениях про y=Int(x+0.5). С тех пор у меня рефлекс, по которому при разговоре об округлении я в первую очередь вспоминаю про ЦЕЛОЕ(). Поэтому задачку решил, практически не напрягаясь. Мне удивительно, что в этом штурме не поучаствовали наиболее старшие форумчане - им наверняка это тоже должно быть близко. Наверное, не заходили в тему...
Quote (MCH)
В детстве (т.е. давным давно), когда программировал на Basic
В то же самое время, которое у меня совпало с юностью (я несколько постарше), варился в тех же ощущениях про y=Int(x+0.5). С тех пор у меня рефлекс, по которому при разговоре об округлении я в первую очередь вспоминаю про ЦЕЛОЕ(). Поэтому задачку решил, практически не напрягаясь. Мне удивительно, что в этом штурме не поучаствовали наиболее старшие форумчане - им наверняка это тоже должно быть близко. Наверное, не заходили в тему... Gustav
странно, что Сергеи (оба и Serge007 и ZORRO2005) не обратили внимания на формулу
В своё оправдание могу сказать, что я решал несколько иную задачу, чем видимо было поставлено Исходя из
Quote (MCH)
пусть будет число полученое по формуле =СЛЧИС()*1000
я понял что число может быть и отрицательным. Я брал большее по модулю, т.е. -45,9 или -45,1 должно было быть округлено не до -45, а до -46. Этого я добиться в 12 знаков не смог Видимо переборщил с условиями...
Quote (MCH)
странно, что Сергеи (оба и Serge007 и ZORRO2005) не обратили внимания на формулу
В своё оправдание могу сказать, что я решал несколько иную задачу, чем видимо было поставлено Исходя из
Quote (MCH)
пусть будет число полученое по формуле =СЛЧИС()*1000
я понял что число может быть и отрицательным. Я брал большее по модулю, т.е. -45,9 или -45,1 должно было быть округлено не до -45, а до -46. Этого я добиться в 12 знаков не смог Видимо переборщил с условиями...Полковник МВД
я решал несколько иную задачу, чем видимо было поставлено
Сергей, сам виноват, я специально ограничил исходные данные формулой, чтобы не получались отрицательные числа, т.к. разлиия в вычислениях были бы только с отрицательными числами.
Да и в условиях я написал "нужно получить число округленное до целого в большую сторону" а не большее по модулю И в сообщении № 8 я еще раз подчеркнул, для каких исходных данных формулы должны давать одинаквый результат.
Если бы написал, что результат должен совпадать только для положительных чисел, это была бы прямая подсказка, подталкивающая к ответу.
Мне кстати не понятно, почему ОКРУГЛВВЕРХ округляет -45,9 до -46, а не до -45, я об этом даже не догадывался пока в справку по функции не заглянул. а ОКРВВЕРХ вообще не работает с отрицательными числами
Quote (Полковник МВД)
я решал несколько иную задачу, чем видимо было поставлено
Сергей, сам виноват, я специально ограничил исходные данные формулой, чтобы не получались отрицательные числа, т.к. разлиия в вычислениях были бы только с отрицательными числами.
Да и в условиях я написал "нужно получить число округленное до целого в большую сторону" а не большее по модулю И в сообщении № 8 я еще раз подчеркнул, для каких исходных данных формулы должны давать одинаквый результат.
Если бы написал, что результат должен совпадать только для положительных чисел, это была бы прямая подсказка, подталкивающая к ответу.
Мне кстати не понятно, почему ОКРУГЛВВЕРХ округляет -45,9 до -46, а не до -45, я об этом даже не догадывался пока в справку по функции не заглянул. а ОКРВВЕРХ вообще не работает с отрицательными числамиMCH
Сообщение отредактировал MCH - Среда, 03.10.2012, 06:53
Цитата, MCH писал(а): Видимо переборщил с условиями...
Цитата не моя
Quote (Полковник МВД)
СЛЧИС может возвращать отрицательные
Предвидел от тебя подобное заявление Можешь показать скрин данного бага?
Я не смог его воспроизвести в 2003 офисе на 10 млн. генераций (дальше лень ждать): [vba]
Code
Sub www() Dim i& Cells(1, 1).Formula = "=RAND()" For i = 1 To 10000000 If Cells(1, 1).Value < 0 Then Debug.Print i: Exit For Cells(1, 1).Calculate Next i End Sub
[/vba]
Quote (Полковник МВД)
Цитата, MCH писал(а): Видимо переборщил с условиями...
Цитата не моя
Quote (Полковник МВД)
СЛЧИС может возвращать отрицательные
Предвидел от тебя подобное заявление Можешь показать скрин данного бага?
Я не смог его воспроизвести в 2003 офисе на 10 млн. генераций (дальше лень ждать): [vba]
Code
Sub www() Dim i& Cells(1, 1).Formula = "=RAND()" For i = 1 To 10000000 If Cells(1, 1).Value < 0 Then Debug.Print i: Exit For Cells(1, 1).Calculate Next i End Sub