Zmiana double na integer

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1521
Rejestracja: 09 sie 2009, 21:27

Zmiana double na integer

Nieprzeczytany post autor: personov »

W poniższym kodzie EA wychodzi mi ostrzeżenie "possible los of data due to type conversion".

Kod: Zaznacz cały

#property strict
double rtt=2.0;
int sh,s;
void OnInit(){EventSetMillisecondTimer(100);}
void deinit(){}
void OnTimer(){
  s=NormalizeDouble(rtt,0);
  sh=iBarShift("EURUSD",PERIOD_M1,s);
}  
Prawdopodobnie chodzi o to, że rtt to double ( chociaż jest to liczba całkowita ), a "s" to integer.
Jak pozbyć się tego ostrzeżenia ? Próbowałem już zaokrąglić rtt za pomocą NormalizeDouble ( jak widać w kodzie ), ale nie pomaga.
Ważne : rtt musi być double.
Solą życia jest kasa.

JAREK67
Maniak
Maniak
Posty: 2143
Rejestracja: 13 lip 2006, 11:21

Re: Zmiana double na integer

Nieprzeczytany post autor: JAREK67 »

Może tak:

Kod: Zaznacz cały

#property strict
double rtt=2.0;
int sh;
datetime s;
void OnInit(){EventSetMillisecondTimer(100);}
void deinit(){}
void OnTimer(){
  s=StrToInteger(DoubleToStr(rtt,0));
  sh=iBarShift("EURUSD",PERIOD_M1,s);
} 

grzesq
Stały bywalec
Stały bywalec
Posty: 30
Rejestracja: 10 lip 2009, 16:57

Re: Zmiana double na integer

Nieprzeczytany post autor: grzesq »

Kod: Zaznacz cały

#property strict
double rtt=2.0;
int sh,s;
void OnInit(){EventSetMillisecondTimer(100);}
void deinit(){}
void OnTimer(){
   // 1. Po porostu rzutujesz to samo co MathFloor
    s = (int)rtt;

   // 2.  zwraca najmniejszą liczbę całkowitą większą bądź równą zadanemu argumentowi.
    s = (int)MathCeil(rtt);

   // 3.  zwraca największą liczbę całkowitą mniejszą bądź równą zadanemu argumentowi.
    s = (int)MathFloor(rtt);

  // 4. zaokrągla wartość podanej zmiennej do najbliższej najwyższej wartości.
    s = (int)MathRound(rtt);

  sh=iBarShift("EURUSD",PERIOD_M1,s);
} 

Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1521
Rejestracja: 09 sie 2009, 21:27

Re: Zmiana double na integer

Nieprzeczytany post autor: personov »

JAREK67 - pomogło. Dzięki.
grzesq tu nie chodzi o zaokrąglanie. Próbowałem już tych matematycznych sposobów, ale ostrzeżenie i tak wywalało. Tu chodziło o błędny typ tej wartości. Ale i tak dziękuję za pomoc i dobre chęci.
Solą życia jest kasa.

grzesq
Stały bywalec
Stały bywalec
Posty: 30
Rejestracja: 10 lip 2009, 16:57

Re: Zmiana double na integer

Nieprzeczytany post autor: grzesq »

Wywalalo ci ostrzezeznie bo te funkcje zwracaja double. Kluczowe jest rzutowanie

Kod: Zaznacz cały

int  s = (int)rtt; 
w tym wypadku rowniez nie dostaniesz ostrzezenia. I jest to bardzej naturalne i lepiej czytelne niz double->string->integer. No ale to tylko moja opinia.

ODPOWIEDZ