Страницы: 1
RSS
Результат между 0 и 1 отобразить как 0,5
 
Если в формуле встречаются одинаковые функции (блоки функций), то они вычисляются столько раз, сколько встречаются в формуле. Так?

Теперь проблема. Есть некая БольшаяФормула, которая возвращает значения от 0 включительно до 1 включительно. И надо её обработать так, что если ровно 0, то надо получить в итоге 0, если ровно 1, то 1, а если любое дробное между 0 и 1, то 0.5.
В обычном случае понятно:
Код
=ЕСЛИ(БольшаяФормула=0;0;ЕСЛИ(БольшаяФормула=1;1;0.5))
Но тут получается, что эта БольшаяФормула вычисляется 2 (два) раза, чего хотелось бы избежать, ибо она сама по себе считается долго. Ну и ещё есть ограничение в том, что нельзя использовать дополнительный столбец. Можно использовать любые родные функции: вычисления, ОКРУГЛ, ЦЕЛОЕ, ABS и другие, хоть SIN, но так, чтоб БольшаяФормула  вычислялась только 1 раз.
Вроде как задачка простая, но полдня не могу придумать решение.
 
tolikt, макрофункцию оптимизировать можно легко, но у вас только "родные". Ща из избушки формулисты вылезут и помогут)
Изменено: Jack Famous - 23.03.2021 13:54:20
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
tolikt написал:
Вроде как задачка простая, но полдня не могу придумать решение.
132 сообщения а толку нет будете еще не один день придумывать решение, где пример в файле, где описание самой задачи не ваше видение проблемы, а то что именно вы решаете
Лень двигатель прогресса, доказано!!!
 
к знаку приведите. а там - выбор

если б БольшаяФормула принимала значения <0, >0, 0, то было бы так:
=выбор(2+знак(большаяформула);0;1;2)
 
Код
=ВЫБОР((A1+1)*10-10+1;
0;
0,5;
0,5;
0,5;
0,5;
0,5;
0,5;
0,5;
0,5;
0,5;
1)
 
=ВПР(A2;{0;0:1E-20;0,5:1;1};2)
=ПРОСМОТР(A2;{0;1E-20;1};{0;0,5;1})
=ВЫБОР(ПОИСКПОЗ(A2;{0;1E-20;1});;0,5;1)
=ИНДЕКС({0;0,5;1};ПОИСКПОЗ(A2;{0;1E-20;1}))
 
Начал дорабатывать пример от Белкина, но тут подоспели Механикс85 и викттур.
Как я и подозревал, решение было рядом. Спасибо всем, всё работает!
 
vikttur, У меня в Вашем файле  синтаксис рабочий
Код
=VLOOKUP(A2;{0\0;1E-20\0,5;1\1};2)

вместо
Код
=ВПР(A2;{0;0:1E-20;0,5:1;1};2)
 
Я же не вижу Ваших настроек, писал для своих  :)
 
Код
=ВЫБОР(ОКРУГЛВВЕРХ(БольшаяФормула+ДЛСТР(БольшаяФормула);0);
      0;1;0.5;0.5;0.5;0.5;0.5;0.5;0.5;0.5;0.5;0.5;0.5;0.5;0.5;0.5;0.5;0.5;0.5;0.5;0.5;0.5)
 
Код
=ВЫБОР(МИН(3;ОКРУГЛВВЕРХ(БольшаяФормула+ДЛСТР(БольшаяФормула));0);0;1;0.5)
=ИНДЕКС({0;0.5;1};ПОИСКПОЗ(БольшаяФормула;{0;0.000000000000001;1}))
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, красиво, но вроде бы можно без индекса?
Код
=(ПОИСКПОЗ(БольшаяФормула;{0;0,000000000000001;1})-1)/2
Вот горшок пустой, он предмет простой...
 
Код
=ВЫБОР(ЕСЛИОШИБКА(ОКРУГЛВНИЗ(LOG10(БольшаяФормула)+1;0)+2;1);0;0.5;1)
=ПЕРЕКЛЮЧ(БольшаяФормула;1;1;0;0;0.5)
 
vikttur, А можно подробнее про эти настройки и вообще эту конструкцию, или где почитать?
 
О чем речь? Если об 1E-20, то это экспоненциальная запись числа (в данном случае - очень малого)
Eсли интересно узнать о {} вутри формулы, ищите информацию о массиве констант
 
=IFERROR(1-SIGN(-LOG(БольшаяФормула))/2;0)
Че-то заминусовался
=IFERROR(1+SIGN(LOG(БольшаяФормула))/2;)
Изменено: БМВ - 23.03.2021 19:36:40
По вопросам из тем форума, личку не читаю.
 
vikttur, Речь о форме записи 0\0 на моем компе и на Вашем 0;0 внутри массива. Что эта за форма и что означает?
Почитал, таким образом Вы описали двумерный массив.
Изменено: skais675 - 23.03.2021 19:45:56
 
skais675, разделитель столбцов и строк в массиве отличается и зависит от локализации и региональных.
Я где то писал об этом. У меня на русских регионалках и Eng интерфейсе ; - строки, \ - столбцы. при этом при тех же регионалках, но при RUS разделитель иной, при этом ; - разделитель столбцов, что сильно сбивает с непривычки.
Изменено: БМВ - 23.03.2021 21:35:27
По вопросам из тем форума, личку не читаю.
 
БМВ, Именно поэтому и я не понял синтаксиса.
Страницы: 1
Наверх