Математическое округление.

 
На нашёл функции для математического округления в mql5. Есть конечно NormalizeDouble но это не округление вообще, а просто откидывание цифр. Может есть у кого нибудь отдельно функция для вычисления, буду весьма признателен. 
 
h_bercut:
На нашёл функции для математического округления в mql5. Есть конечно NormalizeDouble но это не округление вообще, а просто откидывание цифр. Может есть у кого нибудь отдельно функция для вычисления, буду весьма признателен. 

Плохо искали. 

MathRound 

 
h_bercut:
На нашёл функции для математического округления в mql5. Есть конечно NormalizeDouble но это не округление вообще, а просто откидывание цифр. Может есть у кого нибудь отдельно функция для вычисления, буду весьма признателен. 

Выделенное - ложное утверждение.

Если нужно округление до ближайшего целого числа то вот пример:

//+------------------------------------------------------------------+
//|                                                    MathRound.mq5 |
//|                              Copyright © 2016, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property description "MathRound: Округляет число до ближайшего целого"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   double price=1.01560;
   for(int i=0;i<10;i++)
     {
      Print(DoubleToString(price,5),", MathRound: ",MathRound(price));
      price+=1.9;
     }
  }
//+------------------------------------------------------------------+


И результат: 

2016.12.15 17:28:50.555 MathRound (EURUSD,M1)   1.01560, MathRound: 1.0
2016.12.15 17:28:50.555 MathRound (EURUSD,M1)   2.91560, MathRound: 3.0
2016.12.15 17:28:50.555 MathRound (EURUSD,M1)   4.81560, MathRound: 5.0
2016.12.15 17:28:50.555 MathRound (EURUSD,M1)   6.71560, MathRound: 7.0
2016.12.15 17:28:50.555 MathRound (EURUSD,M1)   8.61560, MathRound: 9.0
2016.12.15 17:28:50.555 MathRound (EURUSD,M1)   10.51560, MathRound: 11.0
2016.12.15 17:28:50.555 MathRound (EURUSD,M1)   12.41560, MathRound: 12.0
2016.12.15 17:28:50.555 MathRound (EURUSD,M1)   14.31560, MathRound: 14.0
2016.12.15 17:28:50.555 MathRound (EURUSD,M1)   16.21560, MathRound: 16.0
2016.12.15 17:28:50.555 MathRound (EURUSD,M1)   18.11560, MathRound: 18.0


 

Файлы:
MathRound.mq5  3 kb
 
Vitalie Postolache:

Плохо искали. 

MathRound 

искал хорошо - это округление до целого числа, а мне надо до опр.знака после запятой :)
 
h_bercut:
искал хорошо - это округление до целого числа, а мне надо до опр.знака после запятой :)
Тогда ответ выше. Нормализация не "просто откидывание цифр".
 
h_bercut:
искал хорошо - это округление до целого числа, а мне надо до опр.знака после запятой :)
Вам для чего: для печати во вкладку "Эксперты" или для нормализации цен TakeProfit и StopLoss?
 
Vitalie Postolache:
Тогда ответ выше. Нормализация не "просто откидывание цифр".

к сожалению оно округляет допустим 161.4345 до 161.43. Я думаю суть вы поймёте.

Vladimir Karputov:
Вам для чего: для печати во вкладку "Эксперты" или для нормализации цен TakeProfit и StopLoss?

Нужно что бы 161.4345 округлилось до 161.44.  

 
h_bercut:

к сожалению оно округляет допустим 161.4345 до 161.43. Я думаю суть вы поймёте.

Нужно что бы 161.4345 округлилось до 161.44.  

Это не МАТЕМАТИЧЕСКОЕ округление :) Если округлять по правилам (алгебра, 5-й класс), то 161.4345 округляется с точность до второго знака до 161.43
 
Vladimir Karputov:
Если округлять по правилам (алгебра, 5-й класс), то 161.4345 округляется с точность до второго знака до 161.43

А там только одно правило прописано? Вообще их несколько...

Округление к большему (округление к +∞, округление вверх, англ. ceiling — досл. «потолок») — если обнуляемые знаки не равны нулю, предшествующий знак увеличивают на единицу, если число положительное, или сохраняют, если число отрицательное.  

 

В Math.mqh есть перегрузка функции округления до заданного числа знаков после запятой.

#include <Math\Stat\Math.mqh>
void OnStart()
  {
//---
   Print(M_PI);
   for(int digits=0; digits<10; digits++)
     {
      Print(digits,": ",MathRound(M_PI,digits));
     }
  }
TestRound (EURUSD,H1)    3.141592653589793
TestRound (EURUSD,H1)    0: 3.0
TestRound (EURUSD,H1)    1: 3.1
TestRound (EURUSD,H1)    2: 3.14
TestRound (EURUSD,H1)    3: 3.142
TestRound (EURUSD,H1)    4: 3.1416
TestRound (EURUSD,H1)    5: 3.14159
TestRound (EURUSD,H1)    6: 3.141593
TestRound (EURUSD,H1)    7: 3.1415927
TestRound (EURUSD,H1)    8: 3.14159265
TestRound (EURUSD,H1)    9: 3.141592654
TestRound (EURUSD,H1)    10: 3.1415926536
 
A100:

А там только одно правило прописано? Вообще их несколько...

Округление к большему (округление к +∞, округление вверх, англ. ceiling — досл. «потолок») — если обнуляемые знаки не равны нулю, предшествующий знак увеличивают на единицу, если число положительное, или сохраняют, если число отрицательное.  

В 5-м классе вроде только одно округление: правило "0,5".