Funkcje matematyczne:   MathRound()

Funkcja double MathRound() zaokrągla do liczby całkowitej liczbę, zapisaną w nagłówku funkcji. Więcej informacji można znaleźć w specyfikacji MQL4.


Przykład 1

#property strict
void OnStart()
  {
//--- zaokrąglić liczby zmiennoprzecinkowe
   double value_1  = 1.9;
   double result_1 = MathRound(value_1);
   Print("1) result_1 = ",result_1);

   Print("2) MathRound(-0.00001) = ",MathRound(-0.00001));

//--- zaokrąglić liczbę całkowitą
   int    value_3  = -5;
   Print("3) MathRound(value_3) = ",MathRound(value_3));

//--- zaokrąglić liczby zmiennoprzecinkowe
   Print("4) MathRound(1.50001) = ",MathRound(1.50001));     // 2.0
   Print("5) MathRound(1.49999) = ",MathRound(1.49999));     // 1.0
   Print("6) MathRound(-1.50001) = ",MathRound(-1.50001));   // -2.0
   Print("7) MathRound(-1.49999) = ",MathRound(-1.49999));   // -1.0
  }

Należy pamiętać, że do zaokrąglenia funkcja MathRound() bierze pod uwagę tylko pierwszą cyfrę po kropce (rys. 1, przykłady 4-7). Na przykład, liczbę 1.49999 funkcja zaokrągla tak samo jak 1.40000, tj. do 1.0.

Rys. 1. Przykłady stosowania funkcji MathRound().


Przykład 2

Skrypt do zaokrąglenia liczby zmiennoprzecinkowej do liczby całkowitej za pomocą własnej funkcji z możliwością wskazania ilości cyfr po kropce, które należy wziąć pod uwagę.

#property strict
void OnStart()
  {
//--- zaokrąglić 123.45678
   Print("1) MathRoundPrecision(123.45678,-1) = ",MathRoundPrecision(123.45678, -1)); // 123.0
   Print("2) MathRoundPrecision(123.45678,0) = ", MathRoundPrecision(123.45678, 0));  // 123.0
   Print("3) MathRoundPrecision(123.45678,1) = ", MathRoundPrecision(123.45678, 1));  // 123.0
   Print("4) MathRoundPrecision(123.45678,2) = ", MathRoundPrecision(123.45678, 2));  // 124.0
   Print("5) MathRoundPrecision(123.45678,3) = ", MathRoundPrecision(123.45678, 3));  // 124.0
   Print("6) MathRoundPrecision(123.45678,4) = ", MathRoundPrecision(123.45678, 4));  // 124.0
   Print("7) MathRoundPrecision(123.45678,5) = ", MathRoundPrecision(123.45678, 5));  // 124.0
   Print("8) MathRoundPrecision(123.45678) = ",   MathRoundPrecision(123.45678));     // 124.0

//--- zaokrąglić 9.9
   Print("9)  MathRoundPrecision(9.9,0) = ",MathRoundPrecision(9.9, 0));    // 9.0
   Print("10) MathRoundPrecision(9.9,1) = ",MathRoundPrecision(9.9, 1));    // 10.0
  }

//--- funkcja własna do zaokrąglenia
double MathRoundPrecision(double f_value,          // wartość do zaokrąglenia
                          int    f_precision = 16) // ilość cyfr po kropce
  {
   double f_result = 0.0;
   if(f_precision <= 0)
     {
      f_result = (int)f_value;
      return(f_result);
     }
   else
     {
      f_result = f_value * MathPow(10, f_precision-1);
      int i = 0;
      while(i < f_precision)
        {
         f_result = MathRound(f_result);
         f_result = f_result / 10;
         i++;
        }
      return(f_result * 10);
     }
  }

Rys. 2. Przykłady stosowania funkcji własnej MathRoundPrecision().