Funkcja double MathRound() zaokrągla do liczby całkowitej liczbę, zapisaną w nagłówku funkcji. Więcej informacji można znaleźć w specyfikacji MQL4.
#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().
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().