Ten typ służy do przechowywania liczb zmiennoprzecinkowych, tj. liczb z wartościami ułamkowymi, rozdzielonych znakiem dziesiętnym w postaci kropki. Minimalna dodatnia wartość: 1.175494351e-38, maksymalna: 3.402823466e+38. W pamięci zajmuje 4 bajty (32 bity).
Ten typ też służy do przechowywania liczb zmiennoprzecinkowych, tj. liczb z wartościami ułamkowymi, rozdzielonych znakiem dziesiętnym w postaci kropki. Minimalna dodatnia wartość: 2.2250738585072014e-308, maksymalna: 1.7976931348623158e+308. W pamięci zajmuje 8 bajtów (64 bitów).
Ograniczenia dokładności liczb typu float mogą być w wielu przypadkach niewystarczające. Dlatego proponowane jest stosowanie typu double. W niektórych przypadkach naukowy sposób zapisu liczb jest lepszy niż tradycyjny.
double d1 = 1.1;
double d2 = -555.4321;
double d3 = 0.0000001;
double d4 = 0.000000000000000000000000532123527;
double d5 = 5.32123527e-25; // naukowy sposób zapisu liczby
Jeśli będziesz potrzebował obliczyć liczbę zmiennoprzecinkową na podstawie liczb całkowitych, np. 1 podzielić na 2, to w MQL4 po znaku dziesiętnym napisz 0, tj. zamiast 1 wpisz 1.0, a zamiast 2 wpisz 2.0. Chciałbym żebyś wyrobił w sobie taki nawyk. W niektórych przypadkach brak 0 po znaku dziesiętnym może spowodować błędne obliczenia. Przeanalizuj poniższy kod skryptu.
#property strict
void OnStart()
{
double d1 = 1 / 2; // 0.0
double d2 = 1.0 / 2; // 0.5
double d3 = 1 / 2.0; // 0.5
double d4 = 1.0 / 2.0; // 0.5
Print("d1 = ",d1,
", d2 = ",d2,
", d3 = ",d3,
", d4 = ",d4);
}
Po uruchomieniu tego skryptu w logach terminala zobaczysz wpis 'd1 = 0.0, d2 = 0.5, d3 = 0.5, d4 = 0.5'. Widzisz, zmienna d1 jest równa 0.0, a nie 0.5. W obliczeniach d2, d3 i d4 jest obecna chociażby jedna liczba z 0 po kropce. W przypadku d1 miało miejsce ukryta konwersja typu double do typu int. W związku z tym tworząc zmienną double zapisz 0 po kropce. Jeśli pogrzebać w kodach źródłowych standardowych wskaźników MetaTrader 4 to można zobaczyć, że dla zmiennych typu double programiści MetaQuotes Software Corp. też zapisują 0 po kropce (rys 1).
Rys. 1. Typ double w kodzie źródłowym wskaźnika Bollinger Bands.