Скачать MetaTrader 5

Отображение формата double при выводе через Print в логе работы эксперта

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Forex Trader
114287
Forex Trader  
Вот чего-то не могу понять как заставить функцию Print выводить данные с цифрами после запятой.
Имеем простейший эксперт
//+------------------------------------------------------------------+
//|                                                         TEST.mq4 |
//|                      Copyright © 2006, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {double delta;
//----
   delta=1/6;
   Print("delta = ",delta);
   delta=10*1/6;
   Print("delta = ",delta);
   delta=100*1/6;
   Print("delta = ",delta);
//----
   return(0);
  }
//+------------------------------------------------------------------+



Он выдаёт на экране следующее:
2006.04.07 15:49:25 TEST EURUSDm,M1: delta = 16
2006.04.07 15:49:25 TEST EURUSDm,M1: delta = 1
2006.04.07 15:49:25 TEST EURUSDm,M1: delta = 0
А мне бы хотелось, чтобы выводилось следующим образом:
2006.04.07 15:49:25 TEST EURUSDm,M1: delta = 16.6666
2006.04.07 15:49:25 TEST EURUSDm,M1: delta = 1.6666
2006.04.07 15:49:25 TEST EURUSDm,M1: delta = 0.1666

Вопрос в том как это сделать? Кто может подсказать?
Build 191 от 02.03.2006
Неужели нужно в таком простейшем случае использовать функцию DoubleToStr()?

Forex Trader
114287
Forex Trader  
Именно так. Читаем словарь MetaEditor
===
void Print( ... )

Печатает некоторое сообщение в журнал экспертов. Параметры могут иметь любой тип. Массивы нельзя передать в функцию Print(). Массивы должны быть напечатаны поэлементно. Данные типа double печатаются с 4 десятичными цифрами после точки. Чтобы печататься с большей точностью, следует использовать функцию DoubleToStr(). Данные типов bool, datetime и color будут напечатаны в виде чисел. Чтобы печатать значения datetime как строку с датой, следует использовать функцию TimeToStr().
===
Forex Trader
114287
Forex Trader  
Вот внёс в эксперт эту самую функцию DoubleToStr() соглачно справочной системе:
 delta=1/6;
   Print("delta = ",DoubleToStr(delta,4));
   delta=10*1/6;
   Print("delta = ",DoubleToStr(delta,4));
   delta=100*1/6;
   Print("delta = ",DoubleToStr(delta,4));


Имеем в логе эксперта следующее:
2006.04.07 15:58:54 TEST EURUSDm,M1: delta = 16.0000
2006.04.07 15:58:54 TEST EURUSDm,M1: delta = 1.0000
2006.04.07 15:58:54 TEST EURUSDm,M1: delta = 0.0000
Это вообще как, нормально????? Куда подевалась остальная часть числа?

Forex Trader
114287
Forex Trader  
DoubleToStr(delta,8)
Forex Trader
114287
Forex Trader  
Понял проблему.
100.0*1/6
В Вашем случае работает целочисленная арифметика
Forex Trader
114287
Forex Trader  
На самом деле - это конкретная подстава поскольку с этим можно очень крупно влететь!!! Я сегодня уже часок над этим время потратил. Хорошо, что вовремя обратил внимание на это!
Я например об этом не имел никакого представления. А возможно ли в следующих версиях MT4 поправить это дело? То есть чтобы если мы присваиваем результат к переменной типа double, то данные в правой части автоматически преобразовывались бы в double (добавлялся бы такой же нолик после запятой к каждому числу) и потом производились бы арифметические действия над ними? А что если у нас в примере были бы не голые числа, а переменные типа int? Что тогда будем делать? Отлавливать каждую возможную ситуацию? А если таких мест десятки? Это ведь всё сразу расползается!
Forex Trader
114287
Forex Trader  
Это - не подстава. Вопросы преобразования типов многократно обсуждались. Мы ничего менять не будем.
Возможно мы введём явное преобразование типов, однако я ничего не могу сказать Вам по срокам.
MetaQuotes Software Corp.
Модератор
186062
MetaQuotes Software Corp.  
На самом деле - это конкретная подстава поскольку с этим можно очень крупно влететь!!!

Именно также на этом влетают и на C/C++ языках.
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий