오류, 버그, 질문 - 페이지 1167

 
Swan :
아마도, 그러나 올바르게 전송된 것 같습니다. 전역 변수 창에서 값은 반올림되어 17자리를 표시합니다.
18 아직...
 
TheXpert :
유니언캐스트가 구출합니다. mql5에서는 구조를 통해서도 합법입니다.
MQL4. 무엇을 묘사할 수 있습니까?
 
artmedia70 :
MQL4. 무엇을 묘사할 수 있습니까?
새로운 MQL4가 MQL5로 올라오지 않았습니까?
 
marketeer :
새로운 MQL4가 MQL5로 올라오지 않았습니까?
설마. Help로 판단하지만 거의 같은 것입니다. 그러나 우리는 판단하지 않을 것입니다. 우리는 결과에 관심이 있습니다
 
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 :
설마. 도움말로 판단하지만 거의 같은 것입니다. 그러나 우리는 판단하지 않을 것입니다. 우리는 결과에 관심이 있습니다
여기에서 Xpert는 결과를 달성하는 방법을 보여주었습니다. 4-ke에서 이미 5-ki의 구문에서 충분합니다.
 
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;
}
//+------------------------------------------------------------------+

double로 변환된 long은 0으로 표시됩니다. 그런 다음이 이중 0은 일반적으로 다시 long으로 변환됩니다. 나는 아무것도 이해하지 못한다...


뭐야...????????????

 
artmedia70 :
그리고 디버거를 살펴볼까요? 0이 아닌 아주 작은 값이 있습니다. 여전히 쟁기질, 무엇이 더 필요합니까?
 
TheXpert :
그리고 디버거를 살펴볼까요? 0이 아닌 아주 작은 값이 있습니다. 여전히 쟁기질, 무엇이 더 필요합니까?

바라보다. 나는 창 ID(길다)를 glob에 보냅니다. 터미널(이중입니다). 나는 통제 전문가의 차트의 id 값을 읽고 이 차트로 데이터를 보내기 위해 다른 차트(EA가 설정함)에 설정된 많은 지표가 필요합니다. EA는 차례로 이 모든 데이터를 처리한 다음 작업합니다. 글로벌 터미널에 0이 쓰여진 것을 보면 인디케이터가 원하는 차트의 필요한 식별자를 정확히 수신하고 데이터를 그곳으로 보낼지 확신이 서지 않습니다. 제로가 보입니다. 그리고 이것은 EA가 실행 중인 차트의 ID와 일치하지 않습니다. 나는 확신할 필요가 있다.
데이터를 정상적으로 변환 할 수 없으면 csv 파일을 사용해야 합니다. 그래도 손실 없이 데이터 변환 문제를 해결하고 싶습니다. 그리고 손실은 없지만 실제 값에 2를 더합니다.

나는 그것을 문자열로 변환하려고 시도했습니다. 같은 말도 안됩니다. long 130462919691841406의 보낸 값을 2만큼 증가시킵니다.

 //+------------------------------------------------------------------+
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

모르겠어요...

 

타에메...

이적하기 전에 롱에서 더블을 넣어야 합니다. 전역 변수의 경우 . 0 값이 아니라 불도저의 두 배 숫자입니다. 예를 들어 1.34 * e-307, 4.29 * e + 120이 될 수 있습니다. 긴 비트가 있기 때문입니다.

옮긴 후 포장을 2배에서 길게 풉니다.

모두.