Hatalar, hatalar, sorular - sayfa 1167

 
Swan :
belki, ama doğru bir şekilde iletilmiş gibi görünüyor. Global Değişkenler penceresinde, değer 17 hane gösterecek şekilde yuvarlanır.
18 hala...
 
TheXpert :
Kurtarmaya Unioncast. Yapılar aracılığıyla bile mql5'te yasaldır.
MQL4. Ne tasvir edilebilir?
 
artmedia70 :
MQL4. Ne tasvir edilebilir?
Yeni MQL4, MQL5'e getirilmedi mi?
 
marketeer :
Yeni MQL4, MQL5'e getirilmedi mi?
Tam olarak değil. Yardıma bakılırsa, pratikte aynı şey. Ama yargılamayacağız. Sonuçla ilgileniyoruz
 
artmedia70 :
MQL4. Ne tasvir edilebilir?

Şimdi bakalım...

İşte hem 4'ü hem de 5'i sürmesi gerektiği ilkesine sahip bir senaryo

 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 :
Tam olarak değil. Yardıma bakılırsa, pratikte aynı şey. Ama yargılamayacağız. Sonuçla ilgileniyoruz
Burada TheXpert sonuca nasıl ulaşılacağını gösterdi. 4-ke'de zaten 5-ki sözdiziminden yeterince var.
 
TheXpert :

Şimdi bakalım...

İşte hem 4'ü hem de 5'i sürmesi gerektiği ilkesine sahip bir senaryo

Genel olarak teneke bir şey ...

 #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;
}
//+------------------------------------------------------------------+

double'a dönüştürülen long sıfır olarak görüntülenir. Her ne kadar o zaman bu çift sıfırdan normal olarak uzuna dönüştürülür. Hiç birşey anlamıyorum...


Ne... ????????????

 
artmedia70 :
Ve bir hata ayıklayıcıya bakmak için? Sıfır olmayan çok küçük bir değer var. Hala pulluklar, başka ne gerekiyor?
 
TheXpert :
Ve bir hata ayıklayıcıya bakmak için? Sıfır olmayan çok küçük bir değer var. Hala pulluklar, başka ne gerekiyor?

Bak. Pencere kimliğini (uzun) glob'a gönderiyorum. terminal (çift kişiliktir). Kontrol uzmanının çizelgesinin id değerini okumak ve verilerini bu çizelgeye göndermek için farklı, herhangi bir çizelge (EA onları ayarlayacaktır) üzerine ayarlanmış birçok göstergeye ihtiyacım var. EA, sırayla, tüm bu verileri işleyecek ve onlarla birlikte çalışacaktır. Global terminalde sıfırın yazıldığını görünce, göstergenin istenen grafiğin tam olarak gerekli tanımlayıcısını alacağından ve verilerini oraya göndereceğinden pek emin değilim. sıfır görüyorum. Ve bu, EA'nın çalıştığı grafiğin kimliğiyle eşleşmiyor. Emin olmam gerek.
Verileri normal şekilde dönüştüremezseniz , csv dosyasını kullanmanız gerekecektir. Yine de veri dönüştürme sorununu kayıpsız çözmek istiyorum. Ve sonra bir kayıp değil, gerçek değere 2 eklenmesi var.

Onu dizgeye dönüştürmeye çalıştım - aynı saçmalık - uzun 130462919691841406'nın gönderilen değerini 2 ile artırıyor:

 //+------------------------------------------------------------------+
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 ));
}
//+------------------------------------------------------------------+

sonuç:

 2014.07 . 07 00 : 45 : 08.513 LongToDouble EURUSD,H4: long_value = 130462919691841406 , double_value = 130462919691841408.00000

Anlamıyorum...

 

Ta emae...

Transferden önce longdan double koymanız gerekiyor. Genel bir değişken için . Sıfır değeri değil, sadece buldozerden alınan bir çift sayı, örneğin 1.34 * e-307 olabilir, 4.29 * e + 120 olabilir, çünkü uzun bitler var.

Aktarımdan sonra, paketi çiftten uzuna çıkarın.

Herşey.