NormalizeDouble - а он работает?

 

Использую вот такую конструкцию в советнике

Comment(sym," открыто ",NormalizeDouble(bal,2)," (бай ",NormalizeDouble(bal_buy,2)," селл ",NormalizeDouble(bal_sell,2),")  история ",NormalizeDouble(his,2),"  итог ",NormalizeDouble(bal+his,2));

В итоге на экране отображается

EUR открыто -5.63 (бай -3.14 селл -2.49)  история -0.07000000000000001  итог -5.7

Разве это нормально при использовании данного оператора?

 
Dmitriy Voevodkin:


Разве это нормально при использовании данного оператора?

Да.

Нормализация - это не округление.

 
Двоичное число: 0.00010001111010111000010011111111......
 
Dmitriy Voevodkin:

Использую вот такую конструкцию в советнике

В итоге на экране отображается

EUR открыто -5.63 (бай -3.14 селл -2.49)  история -0.07000000000000001  итог -5.7

Разве это нормально при использовании данного оператора?

Работает. Но в этом случае надо использовать DoubleToString()
 
PapaYozh:

Да.

Нормализация - это не округление.

https://docs.mql4.com/ru/convert/normalizedouble

NormalizeDouble

Округление числа с плавающей точкой до указанной точности.

NormalizeDouble - Преобразование данных - Справочник MQL4
NormalizeDouble - Преобразование данных - Справочник MQL4
  • docs.mql4.com
NormalizeDouble - Преобразование данных - Справочник MQL4
 
Представление дробных чисел в двоичной системе счисления
 
Alexey Viktorov:
Работает. Но в этом случае надо использовать DoubleToString()

Ваш вариант в данной ситуации помог.

Я конечно знаю, что есть сложности с хранением точного значения чисел с большой разрядностью, но я не верю в то, что значение 0,07 нельзя нормализовать "без потерь".

Помню кипишь, который был из-за некорректных значений double и как вводили эту нормализацию, но похоже она всё-таки на столько кривая, что пришлось ввести ещё DoubleToString.

Ну хоть плюс с минусом не перепутали и то хорошо.

 
Taras Slobodyanik:
Представление дробных чисел в двоичной системе счисления

вы хотите сказать, что есть сложности в 64-х битах сохранить 0,07 без искажений?

я сейчас не обсуждаю 1/3. Сейчас проблема именно в числе 0,07.

 
Dmitriy Voevodkin:

Использую вот такую конструкцию в советнике

В итоге на экране отображается

EUR открыто -5.63 (бай -3.14 селл -2.49)  история -0.07000000000000001  итог -5.7

Разве это нормально при использовании данного оператора?

https://www.mql5.com/ru/forum/1111/page2623#comment_14473837
 
Dmitriy Voevodkin:

Использую вот такую конструкцию в советнике

В итоге на экране отображается

EUR открыто -5.63 (бай -3.14 селл -2.49)  история -0.07000000000000001  итог -5.7

Разве это нормально при использовании данного оператора?

DoubleToString примените и все будет нормально.

 

Я прошу его округлить double до 2 разряда включительно, а он выдаёт 17-и разрядное число.

И в чём тогда глубокий смысл оператора NormalizeDouble, если он не способен выполнить заявленную функцию?

Документация по MQL5: Преобразование данных / NormalizeDouble
Документация по MQL5: Преобразование данных / NormalizeDouble
  • www.mql5.com
NormalizeDouble - Преобразование данных - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Причина обращения: