Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 106
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Подскажите, пожалуйста, решение проблемы округления!
Необходимо избавить число от запятой без остатка - округление и возведение в степень не решают всей проблемы - как быть?
К примеру было 1,44430 а надо 144430.
Часть кода - как есть
NormalizeDouble(Low[1],Digits)*MathPow(10,(Digits+1)*1-1)
Просто раздели на _Point
Не верный результат принтует, оригинал равен 161188 (1,61188) Ваш метод 161187 принт дает 1,6119 (почему округление то делает при принти Low[1], если пять знаков после запятой?), мой вариант 161188.
Но если усложнить задачу
long Calc=
NormalizeDouble(Close[1],Digits)*MathPow(10,(Digits+1)*3-1)+
NormalizeDouble(High[1],Digits)*MathPow(10,(Digits+1)*2-1)+
NormalizeDouble(Low[1],Digits)*MathPow(10,(Digits+1)*1-1);
То, последняя часть числа 161184 - т.е. расхождение на 4 единицы
Ваш Вариант в этом Выражении выдает аналогичное значение
NormalizeDouble(Close[1],Digits)*MathPow(10,(Digits+1)*3-1)+
NormalizeDouble(High[1],Digits)*MathPow(10,(Digits+1)*2-1)+
Low[1]/Point;
Есть мысли в чём ошибка и как её исправить?
Не верный результат принтует, оригинал равен 161188 (1,61188) Ваш метод 161187 принт дает 1,6119 (почему округление то делает при принти Low[1], если пять знаков после запятой?), мой вариант 161188.
Но если усложнить задачу
long Calc=
NormalizeDouble(Close[1],Digits)*MathPow(10,(Digits+1)*3-1)+
NormalizeDouble(High[1],Digits)*MathPow(10,(Digits+1)*2-1)+
NormalizeDouble(Low[1],Digits)*MathPow(10,(Digits+1)*1-1);
То, последняя часть числа 161184 - т.е. расхождение на 4 единицы
Ваш Вариант в этом Выражении выдает аналогичное значение
NormalizeDouble(Close[1],Digits)*MathPow(10,(Digits+1)*3-1)+
NormalizeDouble(High[1],Digits)*MathPow(10,(Digits+1)*2-1)+
Low[1]/Point;
Есть мысли в чём ошибка и как её исправить?
void OnStart()
{
string i = DoubleToString(SymbolInfoDouble(_Symbol, SYMBOL_BID)/_Point, 0);
Print(i);
Print(SymbolInfoDouble(_Symbol, SYMBOL_BID)/_Point);
}/*******************************************************************/
Вот так запусти.
void OnStart()
{
string i = DoubleToString(SymbolInfoDouble(_Symbol, SYMBOL_BID)/_Point, 0);
Print(i);
Print(SymbolInfoDouble(_Symbol, SYMBOL_BID)/_Point);
}/*******************************************************************/
Да, через строковую переменную получается верное число (предварительно), но прибавляются нули 161188.00000000 как от них избавиться?
Да, через строковую переменную получается верное число (предварительно), но прибавляются нули 161188.00000000 как от них избавиться?
В моём коде никаких нулей нету. Смотри как написано.
Спасибо - я пропустил ноль.
Получилась такая конструкция
DoubleToString(Close[1]/_Point,0)+
DoubleToString(High[1]/_Point,0)+
DoubleToString(Low[1]/_Point,0);
Print("CalcX=",CalcX);
А теперь надо разобрать эти цифры обратно на составляющие.
При попытке преобразовать строку в число ловлю опять не верное число 161184 вместо 161188
Print("testX=",testX);
Надо резать видимо строку, но как это сделать оптимально правильно?
Да, через строковую переменную получается верное число (предварительно), но прибавляются нули 161188.00000000 как от них избавиться?
Ну так ... показывайте шаблон. А то как же ж знать чего там у вас?
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
Спасибо - я пропустил ноль.
Получилась такая конструкция
DoubleToString(Close[1]/_Point,0)+
DoubleToString(High[1]/_Point,0)+
DoubleToString(Low[1]/_Point,0);
Print("CalcX=",CalcX);
А теперь надо разобрать эти цифры обратно на составляющие.
При попытке преобразовать строку в число ловлю опять не верное число 161184 вместо 161188
Print("testX=",testX);
Надо резать видимо строку, но как это сделать оптимально правильно?
Ну, а если есть непреодолимое желание поизвращаться то перевести строку обратно в число StringToDouble() и умножить на _Point с нормализацией до нужного количества знаков, наверное _Digits