is_vale:
было использование функции StrToDouble, но эта зараза округляет число до 4 знаков после запятой!!!
Народ подскажите как бороться с количеством знаков дробной части!!! Я уже все мозги вывихнул!
Имеем строку содержащую число с плавающей точкой, нужно его поместить в переменную типа double для дальнейшего использования, причем без каких либо округлений дробной части. Естественной реакцией на задачу было использование функции StrToDouble, но эта зараза округляет число до 4 знаков после запятой!!! Возникает естественный вопрос:
- "А кто ее просил об этом???"
Пошел по пути создания своей функции Str2Double, ниже ее привожу:
До строки возврата, а конкретнее
все идет нормально, но
снова округляет дробную часть до 4 знаков!!! Что за дебилизм? Как это побороть? В частности у меня в поступающих данных есть много чисел с 5 знаками после запятой, а MQL мне режет до четырех хоть тресни.
string value=DoubleToStr(1.28473418, 5); // содержимое строки value - "1.28473"
string value=DoubleToStr(1.28473418, 5);
допотопным Print. До указанного места все идет как по нотам, а далее MQL хватает шашку и...
Почитайте на него документацию:
void Print( | ...) |
Массивы нельзя передать в функцию Print(). Массивы должны быть напечатаны поэлементно.
Данные типа double выводятся с 4 десятичными цифрами после точки. Чтобы получить большую точность, следует использовать функцию DoubleToStr().
Почитайте на него документацию:
void Print( | ...) |
Массивы нельзя передать в функцию Print(). Массивы должны быть напечатаны поэлементно.
Данные типа double выводятся с 4 десятичными цифрами после точки. Чтобы получить большую точность, следует использовать функцию DoubleToStr().
Да ради бога! Причем тут это? Объясню иначе:
Индикатор получает уровень (число - цена) в строковом виде, создает объект "трендовая линия" которой, в качестве цены, передает данное значение преобразовав его в число с плавающей точкой. Результат - на входе имеем 5 знаков после запятой (имеется в виду входная строка), а после преобразования StrToDouble число округленное до ЧЕТЫРЕХ знаков после запятой. Собственно это значение созданная трендовая линия и получает! А нужно буз всяких округлений подать то число которое пришло.
Тот же эффект наблюдается и в вышеописанной функции, а конкретнее при вычислении:
data1+(MathMod(data2,iMnoj) / iMnoj)
Документацию читать я умею, и как вывести число через Print тоже знаю, а вопрос касался совершенно иного...
Да ради бога! Причем тут это? Объясню иначе:
Индикатор получает уровень (число - цена) в строковом виде, создает объект "трендовая линия" которой, в качестве цены, передает данное значение преобразовав его в число с плавающей точкой. Результат - на входе имеем 5 знаков после запятой (имеется в виду входная строка), а после преобразования StrToDouble число округленное до ЧЕТЫРЕХ знаков после запятой. Собственно это значение созданная трендовая линия и получает! А нужно буз всяких округлений подать то число которое пришло.
Тот же эффект наблюдается и в вышеописанной функции, а конкретнее при вычислении:
Документацию читать я умею, и как вывести число через Print тоже знаю, а вопрос касался совершенно иного...
допотопным Print.
покажите участок кода где Вы используете StrToDouble
Label_name;1.33147
int first_bar=WindowFirstVisibleBar(); int lengs=20; double price; string other; string s; handle=FileOpen(StringConcatenate("\\file.txt",FILE_READ|FILE_CSV); other = FileReadString(handle); s = FileReadString(handle); // Тут получаем 1.33147 price = StrToDouble(s); // А тут уже 1.3315 что можно увидеть в свойствах созданнго объекта! ObjectCreate("NAME",OBJ_TREND,0,Time[first_bar],price,Time[first_bar-lengs],price);
Содержимое файла:
Label_name;1.33147
убрал
StringConcatenate(
чтобы скомпилировалось.
Запустил. создалась линия на уровне 1.33147
Что я делаю не так? ((
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Народ подскажите как бороться с количеством знаков дробной части!!! Я уже все мозги вывихнул!
Имеем строку содержащую число с плавающей точкой, нужно его поместить в переменную типа double для дальнейшего использования, причем без каких либо округлений дробной части. Естественной реакцией на задачу было использование функции StrToDouble, но эта зараза округляет число до 4 знаков после запятой!!! Возникает естественный вопрос:
- "А кто ее просил об этом???"
Пошел по пути создания своей функции Str2Double, ниже ее привожу:
До строки возврата, а конкретнее
все идет нормально, но
data1+(MathMod(data2,iMnoj) / iMnoj)
снова округляет дробную часть до 4 знаков!!! Что за дебилизм? Как это побороть? В частности у меня в поступающих данных есть много чисел с 5 знаками после запятой, а MQL мне режет до четырех хоть тресни.