NormalizeDouble парадокс - страница 10

 
barabashkakvn:
Всё приходит постепенно. Сначала Вы должны вспомнить, что предложения пишутся с Большой буквицы, а стиль рубленого стиха никак не подходит для форума. Потом уже и само-собой получится и с нормализацией и с индексацией с нуля.

я ждал этого комментария )))))

 

нет ничего более естественного чем печатать быстро в стиле чата - одной строкой 

это также естественно как считать начиная с 1

и округляя число получать его в том же виде округленным

давайте же, где ваш поток саркастических комментариев, наполненных формализмом?

жизнь - больше чем правильно расставленные точки и запятые и бинарные форматы 

это поток ощущений и он должен быть прекрасен

это свобода и творчество 

что Вы мне ответите на это? 

 
transcendreamer:

Вы все надо мной издеваетесь, да?

мне просто нужно было напечатать дробное число без мусора

а мне доказывают что я что-то неправильно понимаю

mql для меня не самоцель а только инструмент, один из 

по моему существуют очевидные вещи, как то - записал число в переменную, вывел на печать то же что и записал...

абсолютно НЕВАЖНО как это внутри там устроено и как число хранится, это системный уровень

и очевидно что эти хвосты нонсенс и недоработка прикладного уровня - non-friendly

но тут получается опять какой-то анекдот про программистов: "это не баг, это фича" 

не зря эти анекдоты появились, не зря )))))))) 

Нормализация NormalizeDouble() нужна при отсылке рассчитываемых параметров в качестве цен в торговых приказах. Вы можете отсылать цену Ask, Bid без нормализации, так как они уже нормализованы до нужной разрядности. Если же вы рассчитываете цены, например для стопа Bid-stopLoss*Point, то вот это выражение требует нормализации. Точно так же и цены для отложенных ордеров: вы их предварительно рассчитываете, а значит их необходимо нормализовать.

Когда вы сравниваете два вещественных числа, то нужно сравнивать их нормализованную разницу с нулём, либо с неким минимальным значением.

Когда вам требуется посмотреть чего вы там рассчитали, то для вывода на экран нужно использовать DoubleToString() с необходимой вам точностью. IntegerToString() с нужными вам параметрами.

Вот это желательно понять и усвоить.

 
transcendreamer:

нет ничего более естественного чем печатать быстро в стиле чата - одной строкой 

это также естественно как считать начиная с 1

и округляя число получать его в том же виде округленным

давайте же, где ваш поток саркастических комментариев, наполненных формализмом?

жизнь - больше чем правильно расставленные точки и запятые и бинарные форматы 

это поток ощущений и он должен быть прекрасен

это свобода и творчество 

что Вы мне ответите на это? 

Свобода ... а вас кто-то насильно удерживает?

Творчество ... творите, напишите сами для себя свои обёртки ко всем функциям МК и наслаждайтесь прекрасами.

 
artmedia70:

Нормализация NormalizeDouble() нужна при отсылке рассчитываемых параметров в качестве цен в торговых приказах. Вы можете отсылать цену Ask, Bid без нормализации, так как они уже нормализованы до нужной разрядности. Если же вы рассчитываете цены, например для стопа Bid-stopLoss*Point, то вот это выражение требует нормализации. Точно так же и цены для отложенных ордеров: вы их предварительно рассчитываете, а значит их необходимо нормализовать.

Когда вы сравниваете два вещественных числа, то нужно сравнивать их нормализованную разницу с нулём, либо с неким минимальным значением.

Когда вам требуется посмотреть чего вы там рассчитали, то для вывода на экран нужно использовать DoubleToString() с необходимой вам точностью. IntegerToString() с нужными вам параметрами.

Вот это желательно понять и усвоить.

да, это я хорошо понимаю, нельзя послать ордер 1,234567 если котировка 5-знак

про сравнение чисел double я встречал упоминания..... и это ужасно

но насколько я понимаю можно безопасно сравнивать A>B до тех пор пока A и B заметно отличимы

только если окажется что если я например явно задал A=1.23456 и B=1.23456 и при этом if(A==B) выдаст false то это уже какой-то криминал

 
artmedia70:

Нормализация NormalizeDouble() нужна при отсылке рассчитываемых параметров в качестве цен в торговых приказах. Вы можете отсылать цену Ask, Bid без нормализации, так как они уже нормализованы до нужной разрядности. Если же вы рассчитываете цены, например для стопа Bid-stopLoss*Point, то вот это выражение требует нормализации. Точно так же и цены для отложенных ордеров: вы их предварительно рассчитываете, а значит их необходимо нормализовать.

Когда вы сравниваете два вещественных числа, то нужно сравнивать их нормализованную разницу с нулём, либо с неким минимальным значением.

Когда вам требуется посмотреть чего вы там рассчитали, то для вывода на экран нужно использовать DoubleToString() с необходимой вам точностью. IntegerToString() с нужными вам параметрами.

Вот это желательно понять и усвоить.

print и alert кривые - это я уже усвоил
 

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

 например

basis[0]=NormalizeDouble(sum_A,2);

GlobalVariableSet("Equity-"+portfolio_id,basis[0]); 

...

current=NormalizeDouble(GlobalVariableGet("Equity-"+portfolio_id),2);

text = "Positions synchronized at " + current + " for portfolio: " + portfolio_name;

if(!automatic) MessageBox(text,""); else Print(text);

сейчас уже поменял на 

text = "Positions synchronized at " + DoubleToStr(current,2) + " for portfolio: " + portfolio_name;

if(!automatic) MessageBox(text,""); else Print(text);

 и вроде бы хвосты не вылезают, тьфу тьфу

 

 

точнее - в исходном варианте было (string)current

то есть конвертация нормализованного числа оставляла хвосты 

иногда (не всегда) 

 

проблема сравнения двух double возникнет если например одно число задано константой а второе рассчитано через деление/умножение

 

В любом случае еще раз спасибо за то что потратили свое время на безнадежного гуманитария, если я у кого-то вызываю раздражение то еще раз извините, просто высказываю как думаю, без злого намерения.

Попутного всем тренда и хороших новостей.

Причина обращения: