Ошибки, баги, вопросы - страница 3184

 
Yury Lemeshev #:
Друзья, а как округлить 1.1284399, до 1.12844? NormalizeDouble не помогает

Помогает. При правильном использовании.

 
Andrei Sokolov #:

Помогает. При правильном использовании.

Здравствуйте, Андрей! Поделитесь способом правильного использования. У меня была такая же проблема с NormalizeDouble .

С уважением, Владимир.

P.S. Сваял скрипт, запустил на двух разных терминалах и ... О, чудо!!! Всё нормализовалось! Похоже что-то уже подправили.

 
Yury Lemeshev #:
Друзья, а как округлить 1.1284399, до 1.12844? NormalizeDouble не помогает

для нормализации положительной цены текущего символа можно использовать что-то вроде:

 double NormPr(double pr) {
        return long(pr/_Point+0.5)*_Point;
 }

работает быстрее чем  NormalizeDouble 

 
Nikolai Semko #:

для нормализации положительной цены текущего символа можно использовать что-то вроде:

работает быстрее чем  NormalizeDouble 

Когда делал похоже с объёмом, оказалось что иногда результат отличен от NormalizeDouble.

 
MrBrooklin #:

Здравствуйте, Андрей! Поделитесь способом правильного использования. У меня была такая же проблема с NormalizeDouble .

С уважением, Владимир.

P.S. Сваял скрипт, запустил на двух разных терминалах и ... О, чудо!!! Всё нормализовалось! Похоже что-то уже подправили.

,

 

fdCG03=NormalizeDouble(fdCG03,5);Print("199 "+fdCG03);

ответ

2022.05.11 21:58:31.324 2019.07.03 00:00:00   199 1.1284399999999999


 
Andrei Sokolov #:

,

Вывод на печать нужно делать при помощи DoubleToString().

Документация по MQL5: Преобразование данных / DoubleToString
Документация по MQL5: Преобразование данных / DoubleToString
  • www.mql5.com
DoubleToString - Преобразование данных - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Yury Lemeshev #:
Друзья, а как округлить 1.1284399, до 1.12844? NormalizeDouble не помогает
Корень проблемы в том, что не каждое десятичное дробное число может быть представлено двоичным дробным числом.
 
Artyom Trishkin #:

Вывод на печать нужно делать при помощи DoubleToString().

Спасибо

 
Sergey Dzyublik #:

Bug MT5 (build 3280), не понятно почему выбор перегружаемой функции зависит от "истории происхождения" аргумента Container, который ни коем образом в самой перегрузке участия не принимает.
Потратил более 3-х часов, проблему удалось локализировал, однако, все равно получилось не то, что было с самого начала.
Изначально баг был еще коварнее - только при использовании l-value указателей, сейчас же в примере воспроизводим для l-value и r-value указателей.

C++ online: https://onlinegdb.com/pCjzGFT8p

Спасибо за сообщение и предоставленный код.

Некорретно учитывался кастинг указателей, поправил