7. Konwersja typów zmiennych.

7.3. Konwersja za pomocą funkcji

W tym rozdziale omówimy konwersję za pomocą niektórych standardowych funkcji języka MQL4.

  • StringToDouble() - konwertuje tekst, zawierający symbol liczby, do liczby zmiennoprzecinkowej typu double .
  • DoubleToString() - konwertuje liczbę zmiennoprzecinkową w tekst. Działanie tej funkcji zostało dokładnie omówiono w rozdziale 3.9. Przekształcenie double do string.
  • StringToInteger() - konwertuje tekst, zawierający symbol liczby, do liczby całkowitej typu long .
  • IntegerToString() - konwertuje liczbę typu całkowitego, do tekstu.
  • StringToTime() - konwertuje tekst, zawierający czas i/lub datę w formacie "yyyy.mm.dd hh:mi", do wartości typu datetime .
  • TimeToString() - konwertuje wartość, zawierającą czas w sekundach od 01.01.1970, do tekstu w formacie "yyyy.mm.dd hh:mi".
  • ColorToString() - konwertuje wartość koloru do tekstu w formacie "R,G,B".
  • StringToColor() - konwertuje tekst w formacie "R,G,B" lub tekst zawierający nazwę koloru, do wartości typu color .

Niżej kilka przykładów stosowania tych funkcji.


StringToDouble() i DoubleToString().


Kod 1
#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).

Kod 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().


StringToInteger() i IntegerToString().


Kod 3
#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().


Kod 4
#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().


StringToTime() i TimeToString().


Kod 5
#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).

Kod 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().