W tym rozdziale omówimy konwersję za pomocą niektórych standardowych funkcji języka MQL4.
Niżej kilka przykładów stosowania tych funkcji.
#property strict
void OnStart()
{
string A = "1.0005";
string B = "7.234";
//--- konwersja jawna tekstu do liczb typu double za pomocą funkcji
double AA = StringToDouble(A); // AA = 1.0005
double BB = StringToDouble(B); // BB = 7.234
double CC = AA + BB; // CC = 1.0005 + 7.234 = 8.2345
Print("Suma dwóch liczb = ", DoubleToString(CC, 4));
string C = A + B; // C = "1.0005" + "7.234" = "1.00057.234"
Print("Suma dwóch linijek tekstu = ", C);
}
Wynik działania powyższego skryptu (rys. 1).
Rys. 1. Konwersja typów string i double za pomocą funkcji StringToDouble() i DoubleToString().
Jeśli tekst oprócz cyfr i kropki jako znaku dziesiętnego będzie zawierać inne symbole, to kompilator spróbuje przerobić to na liczbę zmiennoprzecinkową najlepiej jak potrafi (kod 2 i rys. 2).
#property strict
void OnStart()
{
string A = "a1.0005";
string B = "7.23 4";
string C = "5,5";
double AA = StringToDouble(A); // AA = 0.0
double BB = StringToDouble(B); // BB = 7.23
double CC = StringToDouble(C); // CC = 5.0
Print("AA = ", DoubleToString(AA, 4));
Print("BB = ", DoubleToString(BB, 4));
Print("CC = ", DoubleToString(CC, 4));
}
Rys. 2. Konwersja typów string i double za pomocą funkcji StringToDouble() i DoubleToString().
#property strict
void OnStart()
{
string A = "1";
string B = "7";
//--- konwersja jawna tekstu do liczb typu long za pomocą funkcji
long AA = StringToInteger(A); // AA = 1
long BB = StringToInteger(B); // BB = 7
long CC = AA + BB; // CC = 1 + 7 = 8
Print("Suma dwóch liczb = ", IntegerToString(CC));
string C = A + B; // C = "1" + "7" = "17"
Print("Suma dwóch linijek tekstu = ", C);
}
Rys. 3. Konwersja typów string i long za pomocą funkcji StringToInteger() i IntegerToString().
#property strict
void OnStart()
{
string A = "a1";
string B = "7 234";
string C = "5,5";
long AA = StringToInteger(A); // AA = 0
long BB = StringToInteger(B); // BB = 7
long CC = StringToInteger(C); // CC = 5
Print("AA = ", IntegerToString(AA));
Print("BB = ", IntegerToString(BB));
Print("CC = ", IntegerToString(CC));
}
Rys. 4. Konwersja typów string i long za pomocą funkcji StringToInteger() i IntegerToString().
#property strict
void OnStart()
{
string A = "2010.01.01 12:00";
//--- konwersja jawna tekstu do wartości typu datetime za pomocą funkcji
datetime AA = StringToTime(A);
if(AA > TimeCurrent())
Print("Wybrany czas ", A, " znajduje się w przyszłości. Teraz jest ",
TimeToString(TimeCurrent())); /* konwersja bieżącego czasu TimeCurrent()
do wartości string */
if(AA < TimeCurrent())
Print("Wybrany czas ", A, " znajduje się w przeszłości. Teraz jest ",
TimeToString(TimeCurrent())); /* konwersja bieżącego czasu TimeCurrent()
do wartości string */
}
Rys. 5. Konwersja typów string i datetime za pomocą funkcji StringToTime() i TimeToString().
Jeśli tekst oprócz cyfr i kropki będzie zawierać inne symbole, to kompilator spróbuje przerobić to na datę najlepiej jak potrafi (kod 6 i rys. 6).
#property strict
void OnStart()
{
string A = "X";
datetime AA = StringToTime(A);
Print("Czas AA = ", TimeToString(AA));
string B = "99999.01.01 12:00";
datetime BB = StringToTime(B);
Print("Czas BB = ", TimeToString(BB));
string C = "2010.01.;01 12:00";
datetime CC = StringToTime(C);
Print("Czas CC = ", TimeToString(CC));
}
Rys. 6. Konwersja typów string i datetime za pomocą funkcji StringToTime() i TimeToString().