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

 
-Aleks-:

Так как не получил ответ в другой ветке, то повторю вопрос тут, быть может тут помогут

"

Подскажите, пожалуйста, в чём моя ошибка.

for(int i=0;i<N_Sell;i++) printf("OpenSellTime[%d] = %G",i,TimeToString(OpenSellTime[i],TIME_DATE|TIME_MINUTES)," PriceOpenSell[%d] = %G",i,PriceOpenSell[i]);

Не принтуется дата из массива OpenSellTime и не вторая часть выражения - PriceOpenSell.

И, не могу найти про команды printf типа  %G и %d.

"

Хотя, Вам также подошел бы любой учебник по С.
 
Alexey Kozitsyn:
Хотя, Вам также подошел бы любой учебник по С.

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

Если я правильно понимаю, то %d - это игнорирование нулей, если они будут, а %G - выводить значение без отсечения нулей? Вот вроде не дурак, а понять хелп не могу, а не поняв не получиться понять, почему моя строка не работает надлежащим образом...

 
-Aleks-:

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

Если я правильно понимаю, то %d - это игнорирование нулей, если они будут, а %G - выводить значение без отсечения нулей? Вот вроде не дурак, а понять хелп не могу, а не поняв не получиться понять, почему моя строка не работает надлежащим образом...

Не использую данную функцию в работе, но, думаю, поставить не сложные эксперименты Вам самому труда не составит.
 
-Aleks-:

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

Если я правильно понимаю, то %d - это игнорирование нулей, если они будут, а %G - выводить значение без отсечения нулей? Вот вроде не дурак, а понять хелп не могу, а не поняв не получиться понять, почему моя строка не работает надлежащим образом...

Почитайте тут.
 
Alexey Kozitsyn:
Не использую данную функцию в работе, но, думаю, поставить не сложные эксперименты Вам самому труда не составит.

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

%[flags][width][.precision][{h | l | ll | I32 | I64}]type

в хелпе не указано, что не все параметры могут использоваться. И, главное не ясно, где у меня ошибка в синтаксисе, может если бы мне на неё указали, то я бы лучше уяснил суть вопроса.

 
Artyom Trishkin:
Почитайте тут.

Спасибо. Прочёл бегло, в поисках нужной информации - получается, что первая часть - шаблон и я его составил не верно... так?

Мол, нужно указать места где будут переменные, в моём случае это индекс массива, время и число типа дабл, а потом сами переменные. Из логики статьи, выглядеть должно так

for(int i=0;i<N_Sell;i++) printf("OpenSellTime[%d] = %G, PriceOpenSell[%d] = %G",i,TimeToString(OpenSellTime[i],TIME_DATE|TIME_MINUTES),i,PriceOpenSell[i]);

Или опять не так?

 
-Aleks-:

Спасибо. Прочёл бегло, в поисках нужной информации - получается, что первая часть - шаблон и я его составил не верно... так?

Мол, нужно указать места где будут переменные, в моём случае это индекс массива, время и число типа дабл, а потом сами переменные. Из логики статьи, выглядеть должно так

for(int i=0;i<N_Sell;i++) printf("OpenSellTime[%d] = %G, PriceOpenSell[%d] = %G",i,TimeToString(OpenSellTime[i],TIME_DATE|TIME_MINUTES),i,PriceOpenSell[i]);

Или опять не так?

Ну ведь там очень понятно написано о шаблоне - места вставки переменных обозначаются знаком % в шаблоне. Шаблон весь заключён в кавычки. Далее, после самого шаблона, через запятую перечисляются те переменные, которые указаны в шаблоне. По порядку слева-направа в той последовательности, в которой они записаны в шаблоне.

И ещё там расписаны все спецификации для различного типа переменных, и их форматирования. Просто не бегло прочитайте начиная с заголовка "Форматирование строк по шаблону"

 
Artyom Trishkin:

Ну ведь там очень понятно написано о шаблоне - места вставки переменных обозначаются знаком % в шаблоне. Шаблон весь заключён в кавычки. Далее, после самого шаблона, через запятую перечисляются те переменные, которые указаны в шаблоне. По порядку слева-направа в той последовательности, в которой они записаны в шаблоне.

И ещё там расписаны все спецификации для различного типа переменных, и их форматирования. Просто не бегло прочитайте начиная с заголовка "Форматирование строк по шаблону"

Так я так и написал - в кавычки шаблон, а потом по порядку переменные, что не так?
 
-Aleks-:
Так я так и написал - в кавычки шаблон, а потом по порядку переменные, что не так?

"OpenSellTime[%сюда нужно индекс вписать] = %сюда время, PriceOpenSell[%индекс] = %цена" - такой шаблон?

Если да, то он должен быть таким:

"OpenSellTime[%i] = %I64u, PriceOpenSell[%i] = %.5f"

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

 ,i,OpenSellTime[i],i,PriceOpenSell[i]

итого:

printf("OpenSellTime[%i] = %I64u, PriceOpenSell[%i] = %.5f",i,OpenSellTime[i],i,PriceOpenSell[i]);

... ну ... если я ничего не упустил..

 

MQL4, DoubleToStr() и DoubleToString(). В DoubleToStr() для 2-го аргумента допишите "По умолчанию 8".

Код:

#property strict
void OnStart()
  {
   Print("1) DoubleToStr(0.123456789) = ",DoubleToStr(0.123456789));
   Print("2) DoubleToString(0.123456789) = ",DoubleToString(0.123456789));
  }

В логах результат для них будет = 0.12345679, т.е. функция округляет значение о чем не написано в справке. Думаю стоит дописать об этом или хотя бы поместить там примеры типа:

string value1=DoubleToStr(1.28473418, 5);
// содержимое строки value1 - "1.28473"

string value2=DoubleToStr(1.28473418, 3);
// содержимое строки value2 - "1.285"

, где будет видна округляемость.