错误、漏洞、问题 - 页 1167

 
Swan:
也许,但它似乎是正确传输的。全局变量 窗口四舍五入,显示17位数字。
18...
 
TheXpert:
联盟种姓的救援。它在mql5中是合法的,甚至通过结构。
MQL4。你能做什么?
 
artmedia70:
MQL4。你能想象到什么?
新的MQL4不是拉到了MQL5吗?
 
marketeer:
新的MQL4不是拉到了MQL5吗?
并非如此。虽然从《帮助》来看,它几乎是一样的。但我们不会评判。我们对这个结果感兴趣。
 
artmedia70:
MQL4。你能做什么?

让我们来看看...

这是一个有原理的脚本,应该对4和5都有效

struct DoubleContainer
{
   double value;
};

struct LongContainer
{
   long value;
};

long ToLong(double value)
{
   DoubleContainer d; d.value = value;
   LongContainer l = (LongContainer)d;
   return l.value;
}

double ToDouble(long value)
{
   LongContainer l; l.value = value;
   DoubleContainer d = (DoubleContainer)l;
   return d.value;
}

void OnStart()
{
   long l = 130462919691841406;
   double d1 = (double)l;
   long l1 = (long)d1;
   double d2 = ToDouble(l);
   long l2 = ToLong(d2);
}
 
Vinin:
并非如此。虽然从直升飞机来看,这几乎是同一件事。但我们不打算评判。我们对结果感兴趣。
我认为TheXpert向我们展示了如何获得结果。4中的5的语法已经够多了。
 
TheXpert:

让我们来看看...

这是一个有原理的脚本,它应该在4和5上工作

这真的很奇怪...

#property strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   long l = 130462919691841406;
   //--- приведение типов
   double d1 = (double)l;
   long l1 = (long)d1;
   //--- преобразование типов
   double d2 = ToDouble(l);
   long l2 = ToLong(d2);
   //--- поглядим чё натворили
   Print("long-значение l = "+IntegerToString(l));
   Print("long l привели к типу double d1 = "+DoubleToString(d1,Digits));
   Print("double d1 привели к типу long l1 = "+IntegerToString(l1));
   Print("long l преобразовали в double d2 = "+DoubleToString(d2,Digits));
   Print("double d2 преобразовали в long l2 = "+IntegerToString(l2));
   ToDoubleString(l);
  }
//+------------------------------------------------------------------+
struct DoubleContainer
{
   double value;
};
//+------------------------------------------------------------------+
struct LongContainer
{
   long value;
};
//+------------------------------------------------------------------+
long ToLong(double value)
{
   DoubleContainer d; d.value = value;
   LongContainer l = (LongContainer)d;
   return l.value;
}
//+------------------------------------------------------------------+
double ToDouble(long value)
{
   LongContainer l; l.value = value;
   DoubleContainer d = (DoubleContainer)l;
   return d.value;
}
//+------------------------------------------------------------------+
double ToDoubleString(long long_value) {
   string long_value_str=IntegerToString(long_value);
   double double_value=StrToDouble(long_value_str);
   Print("long_value = "+IntegerToString(long_value)+", double_value = "+DoubleToString(double_value,Digits));
   return double_value;
}
//+------------------------------------------------------------------+

长,转换为双数,显示为零。虽然,在这之后,双零通常被转换回长。我不明白...


什么是...????????????

 
artmedia70:
并在调试器中查看?那里有一个非常小的非零值。它仍然在工作,你还需要什么呢?
 
TheXpert:
并在调试器中查找?那里有一个非常小的非零值。它仍然有效,你还需要什么?

见。我把窗口ID(它是长的)发送到地球仪终端(它们是双的)。我需要一套安装在不同的、任何图表上的指标(专家顾问将设置它们),以读取控制专家顾问的图表的ID值,并将其数据发送到这个图表上。专家顾问将反过来处理所有这些数据,然后与它们一起工作。我在全局终端看到的是零,我不太确定该指标是否会收到所需图表的必要ID并将其数据发送到那里。我看到的是零。而且,它与专家顾问工作的图表ID不相吻合。我需要确定一下。
如果我不能正确转换数据,我将不得不使用csv文件。然而,我想在没有损失的情况下解决数据转换的问题。而且没有损失,只是在真实价值上增加了2。

我试着转换为字符串--同样的事情--它把发送的值增加了2,长130462919691841406。

//+------------------------------------------------------------------+
void ToDoubleString(long long_value) {
   string long_value_str=IntegerToString(long_value);
   double double_value=StrToDouble(long_value_str);
   Print("long_value = "+long_value_str+", double_value = "+DoubleToString(double_value,Digits));
}
//+------------------------------------------------------------------+

结果。

2014.07.07 00:45:08.513 LongToDouble EURUSD,H4: long_value = 130462919691841406, double_value = 130462919691841408.00000

我不明白...

 

Ta maaa...

你必须在转会前把双倍的钱从长。对于全局变量。没有一个零值,它只是一个随机的可数,它可以说是1.34*e-307可以是4.29*e+120,因为有比特长。

传送完毕后,从配音到长音都要拆开包装。

就这样了。