[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 303

 
Еще один вопрос.Разбираю индикатор xrust (https://www.mql5.com/ru/code/8318) собственно нужно передать цены максимума и минимума в советник(с выводом на график).Вот химичил,но что то не передаются значения как надо((.Одно вроде передается,второе получается равно 0.Как вывести реальные значения?Результаты переделки прикрекпляю,в чем ошибка не пойму
Файлы:
 
hoz:

 Учусь работать с библиотеками. Пишу эксперт, есть вот такая функция:

 Я её выносил в инклюд, всё работает как нужно. А если подключить библиотекой, то при компиляции эксперта возникает ошибка:

 Почему данной функции не видно из библиотеки?

Библиотека имеет вот такое содержание и прекрасно компилируется:

Много ошибок. Может пример посмотреть и сделать по аналогии?
 

Есть котировка, предположим   Ask = 1,20667

Из этой котировки нужно вытащить 3-ю цифру после запятой. Т.е. взять значение 1,206, остальные просто отбросить.

Подскажите пож-та как это правильно сделать?  т.к. "Нормализация" округляет и получается 1,20700

Я попробовал обойти:

DoubleToStr(Ask,3)

Да, все верно выдает -> 1.206 . Но при возврате в формат Double опять округляет, но уже до 2-го знака после запятой.

StrToDouble(DoubleToStr(Ask,3)) = 1,2100    // 1,2100 - это получившийся результат (т.е. округляет)

Мне не нужны округления. Мне нужно просто взять 2-ю, 3-ю или 4-ю цифру (на выбор задачи) после запятой, а остальные отбросить.

Как это правильно сделать?

 
Chiripaha:

Есть котировка, предположим   Ask = 1,20667

Из этой котировки нужно вытащить 3-ю цифру после запятой. Т.е. взять значение 1,206, остальные просто отбросить.

Подскажите пож-та как это правильно сделать?  т.к. "Нормализация" округляет и получается 1,20700

Я попробовал обойти:

Да, все верно выдает -> 1.206 . Но при возврате в формат Double опять округляет, но уже до 2-го знака после запятой.

Мне не нужны округления. Мне нужно просто взять 2-ю, 3-ю или 4-ю цифру (на выбор задачи) после запятой, а остальные отбросить.

Как это правильно сделать?

Вы на правильном пути: переводите double в string по Digits, а затем отрезаете от результата (StringSubstr()) нужное количество цифр.
 
Chiripaha:

Есть котировка, предположим   Ask = 1,20667

Из этой котировки нужно вытащить 3-ю цифру после запятой. Т.е. взять значение 1,206, остальные просто отбросить.

Подскажите пож-та как это правильно сделать?  т.к. "Нормализация" округляет и получается 1,20700

Я попробовал обойти:

Да, все верно выдает -> 1.206 . Но при возврате в формат Double опять округляет, но уже до 2-го знака после запятой.

Мне не нужны округления. Мне нужно просто взять 2-ю, 3-ю или 4-ю цифру (на выбор задачи) после запятой, а остальные отбросить.

Как это правильно сделать?

https://docs.mql4.com/ru/strings/StringSubstr
 

Я прошу меня извинить - предполагал, что могу быть неправильно понятным. Постарался уточнить, но все равно эффект остался. - Это моя вина, извините.

Мне нужна не просто цифра (3-я, 4-я и т.п. после запятой), а вся цифра до 2-го, 3-го или 4-го знака после запятой включительно. НО! без округления.

И проблема в том, что когда я обратно возвращаю цифру в тип Double, она снова округляется.

И весь прикол в том, что даже если эту цифру дурацким большим способом перевести по одной буковке сначала в типе Стринг, а затем ее переводить в Дабл,

то она опять округлится. - Вот в чем ирония ситуации. Почему StrToDouble() округляет цифру? - вот этого я не понимаю. Задача функции переделать ее из

одного формата в другой и ничего от себя не "лепить" и не добавлять туда. Но она что-то еще и "улучшает".

 
Chiripaha:

Я прошу меня извинить - предполагал, что могу быть неправильно понятным. Постарался уточнить, но все равно эффект остался. - Это моя вина, извините.

Мне нужна не просто цифра (3-я, 4-я и т.п. после запятой), а вся цифра до 2-го, 3-го или 4-го знака после запятой включительно. НО! без округления.

И проблема в том, что когда я обратно возвращаю цифру в тип Double, она снова округляется.

И весь прикол в том, что даже если эту цифру дурацким большим способом перевести по одной буковке сначала в типе Стринг, а затем ее переводить в Дабл,

то она опять округлится. - Вот в чем ирония ситуации. Почему StrToDouble() округляет цифру? - вот этого я не понимаю. Задача функции переделать ее из

одного формата в другой и ничего от себя не "лепить" и не добавлять туда. Но она что-то еще и "улучшает".

Вы в курсе, чем отличается цифра от числа?
 
Chiripaha:

Я прошу меня извинить - предполагал, что могу быть неправильно понятным. Постарался уточнить, но все равно эффект остался. - Это моя вина, извините.

Мне нужна не просто цифра (3-я, 4-я и т.п. после запятой), а вся цифра до 2-го, 3-го или 4-го знака после запятой включительно. НО! без округления.

И проблема в том, что когда я обратно возвращаю цифру в тип Double, она снова округляется.

И весь прикол в том, что даже если эту цифру дурацким большим способом перевести по одной буковке сначала в типе Стринг, а затем ее переводить в Дабл,

то она опять округлится. - Вот в чем ирония ситуации. Почему StrToDouble() округляет цифру? - вот этого я не понимаю. Задача функции переделать ее из

одного формата в другой и ничего от себя не "лепить" и не добавлять туда. Но она что-то еще и "улучшает".

Нужно развивать умение "слышать"! :))
 

: )))))))) Да - правильно. Все упреки принимаю! - За это еще раз извиняюсь. - Это все издержки сильно развитого (специальными упражнениями)

творческой, образной, поэтической и т.д. стороны - все-таки полушария у человека два: творческое и рациональное. Моя вина в том, что я видел это, и не исправил.

Поэтому все Ваши претензии по адресу и я виновен.

             но только вопрос остался нерешенным...

Как его в итоге разрешить?

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

Как получить нужное число без округления в формате Дабл, до 3-го знака после запятой, к примеру, в значении Ask = 1,20667 ?  -  Решение типа "StrToDouble(DoubleToStr(Ask,3)) = 1,2100    // 1,2100 - это получившийся результат (т.е. округляет)"   не сработало.

Заранее спасибо за Ваши терпимость и понимание.

 
Zhunko:
Вы в курсе, чем отличается цифра от числа?


: )) Да, конечно, я понимаю разницу. Но в извиняющимся и уточняющем посте все равно сделал эту помарку (Как получить нужную цифру без округления...), пришлось исправлять (и не сразу заметил). Это не непонимание, это вторая сторона развития образности. Увы - это ее издержки. Когда говорят "живой мертвец" или что-то подобное, тоже бессмыслица получается. Но без этого невозможно образное восприятие сути вещей. Я к тому, что это нормально. Не судите строго. : ) Ведь буквальное восприятие тоже не есть гут. - Я буду стараться, в т.ч. и с Вашей помощью, правильно корректировать свое общение. Вместе мы сделаем жизнь лучше и совершеннее. Спасибо за Ваши замечания!
Причина обращения: