Округление значения до нечётного числа, кроме.

Автор Gostello, 29.05.2012, 13:29

« назад - далее »

MCH


Михаил С.

Отдельное спасибо можно на QiWi-кошелек 909-771-53-87 или ЯД 41001136675053

MCH


Gostello

MCH наверное из представленных ответов ваш вариант самый "короткий"

Спасибо всем.
  Если будет возможность у модераторов - поправьте, пожалуйста, название темы - мало ли кто будет искать решение на аналогичную задачу, а тут их ого-го  :) 

Михаил С.

ЦитироватьMCH наверное из представленных ответов ваш вариант самый "короткий"
Не всегда самый короткий вариант является самым быстрым.
Конкретно к формуле МСН это не относится, это так, к сведению...
Отдельное спасибо можно на QiWi-кошелек 909-771-53-87 или ЯД 41001136675053

MCH

Цитата: Gostello от 30.05.2012, 16:43
MCH наверное из представленных ответов ваш вариант самый "короткий"
Это вариант Михаила С., формулу которого я немного сократил

IKor

Исключительно для поддержания честного имени :) стыдно дважды ошибаться в одной теме...
Цитата: MCH от 30.05.2012, 10:17
Цитата: IKor от 30.05.2012, 07:58
Но в пределах от 1 до 10 работает же!
3 -> 6 6 -> 9 9 -> 12 10 -> 12
Моя формула все-таки возвращает 3 -> 3 6 -> 6 9 -> 9 10 -> 13... хотя для 0 на почему-то упорно возвращает 0 вместо 3. Разбираться лень. Надеюсь, что хоть чем-то оказался полезен...

MCH

Цитата: IKor от 01.06.2012, 11:58
Исключительно для поддержания честного имени :) стыдно дважды ошибаться в одной теме...
...
Моя формула все-таки возвращает 3 -> 3 6 -> 6 9 -> 9 10 -> 13...
Мы про эту формулу говорим?
=ОКРВВЕРХ(A1;1)+3-ОСТАТ(ОКРВВЕРХ(A1;1);3)

См. вложение

IKor

Цитата: MCH от 01.06.2012, 12:09
Мы про эту формулу говорим?
=ОКРВВЕРХ(A1;1)+3-ОСТАТ(ОКРВВЕРХ(A1;1);3)

Нет, уже про исправленную:
Цитата: IKor от 30.05.2012, 07:58
Для общего случая придется усложнять... Кстати, спасибо Serge 007 за комментарий
=ОКРВВЕРХ(A1;3)+ОКРВВЕРХ(ЗНАЧЕН(ПРАВСИМВ(ОКРВВЕРХ(A1;3)));3)-ЗНАЧЕН(ПРАВСИМВ(ОКРВВЕРХ(A1;3)))
Но в пределах от 1 до 10 работает же! а дальше - слишком много цифр для меня

MCH

Цитата: IKor от 30.05.2012, 07:58
Цитата: iron priest от 29.05.2012, 15:31
Цитата: IKor от 29.05.2012, 15:12
Как вам такая формула?
=ОКРВВЕРХ(A1;1)+3-ОСТАТ(ОКРВВЕРХ(A1;1);3)

для 39,9 результат 42
Но в пределах от 1 до 10 работает же! а дальше - слишком много цифр для меня :)
Для общего случая придется усложнять...
А я эту фразу понял, что первоначальная формула в пределах от 1 до 10 считает правильно, а для других чисел нужно усложнять...
да и усложненная формула дает:
0 -> 0
27, 28, 29, 30 -> 30

IKor

В общем виноват... действительно моя формула не работала для ряда значений.

В формулу приходится вводить поправочный компонент, что само по себе некрасиво... В общем, измененная формула имеет вид:
=ОТБР(A1;-1)+ОКРВВЕРХ(ОСТАТ(ОТБР(A1)+1;10);3)+13*(ОСТАТ(ОТБР(A1)+1;10)=0)
Проверил для целых и дробных положительных чисел в диапазоне от 0 до 300 - обеспечено совпадение с функцией МСН.
Благодарность за внимательность и за решения по оптимизации длины кода функции - тому же МСН.

Пусть рекордно коротких размеров достичь не удалось, но показана возможность использовать функцию ОКРВВЕРХ(...;3) вместо функций группы "Ссылки и массивы" :)

MCH

Цитата: IKor от 01.06.2012, 17:47
В общем, измененная формула имеет вид:
=ОТБР(A1;-1)+ОКРВВЕРХ(ОСТАТ(ОТБР(A1)+1;10);3)+13*(ОСТАТ(ОТБР(A1)+1;10)=0)
Проверил для целых и дробных положительных чисел в диапазоне от 0 до 300 - обеспечено совпадение с функцией МСН.
???
3 -> 6
6 -> 9
9 -> 13
и т.д.

MCH


IKor

"Это заговор! Против меня и франции!" (с)

Забирайте код:
=ОТБР(ОКРВВЕРХ(A2;1);-1)+ОКРВВЕРХ(ОСТАТ(ОТБР(ОКРВВЕРХ(A2;1));10);3)+3*(ОСТАТ(ОТБР(ОКРВВЕРХ(A2;1));10)=0)
как выяснилось проблемы возникли после оптимизации...