https://docs.mql4.com/ru/convert/normalizedouble
double NormalizeDouble( double value, int digits)
double d = NormalizeDouble(1.2345,2); будет вам 1,23
с такими числами будет. Но если человеку нужно не округлить, а отбросить лишние цифры, то нормализация не сработает - число 1.2355 округлится до 1.24 - нужна функция тупого отброса лишних чисел. Мне в своё время пришлось делать её в Delphi и загонять в dll-ку.
с такими числами будет. Но если человеку нужно не округлить, а отбросить лишние цифры, то нормализация не сработает - число 1.2355 округлится до 1.24 - нужна функция тупого отброса лишних чисел. Мне в своё время пришлось делать её в Delphi и загонять в dll-ку.
Округлить вниз до n знаков после запятой можно, например, так (за быстродействие особо не ручаюсь):
double MathFloorN(double a, int n) { if(n<0) return (a); double Z = MathPow(10,n); return(NormalizeDouble(MathFloor(a*Z)/Z,n)); }
Возможно, я нашёл решение: умножаю на 100, потом с помощью MathFloor отсекаю дробную часть. А затем делю на 100. Вроде бы не округляет (а для меня важно именно то, чтобы не было округления)
MathFloor(Close[1]*100)/100
Возможно, я нашёл решение: умножаю на 100, потом с помощью MathFloor отсекаю дробную часть. А затем делю на 100. Вроде бы не округляет (а для меня важно именно то, чтобы не было округления)
MathFloor(Close[1]*100)/100
Вот выше код это и делает)))
Конкорд,, небольшой индючок вам от меня лично. Я его называю "округлитель цены". Индикатор наводит на некоторые мысли терзающие сомнения.
#property copyright "Copyright © DmitriyN-2012" #property link "https://www.mql5.com/ru/users/dmitriyn" #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 White extern int BarsPaint=10000; extern int Okrugl=2; double Cena; double ExtMapBuffer1[]; int init() { SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,ExtMapBuffer1); return(0); } int start() { int counted_bars=IndicatorCounted(); if (counted_bars>0) counted_bars--; int limit; limit=Bars-counted_bars; if (limit>BarsPaint)limit = BarsPaint; for(int i=limit;i>=0;i--) { Cena=NormalizeDouble(Close[i],Okrugl); // Рисование ExtMapBuffer1[i]=Cena; } return(0); }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Пожалуйста, подскажите функцию, чтобы, например, из 1.2345 получалось 1.23 ? Или из 1.5566 получалось 1.55. То есть просто отсекались последние цифры кроме первых двух после запятой без всяких округлений и т.п.
Заранее благодарен всем, кто напишет.