Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Я также только что попробовал использовать это безрезультатно. Возможно, DTS просто изменяет точность значения для внешнего вида, а не фактическое значение? Я не вижу других вариантов.
Да, я думаю, что строка просто делает значение в double версией для печати, но не изменяет его. Не уверен, как это сделать в MQL, но я знаю, что в Java можно принудительно преобразовать тип из одного типа в другой (в данном случае double в int).
Из документации oracle по адресу http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html. Это лишь небольшая часть представленного кода.
В вашем случае, я полагаю, вы могли бы сделать так, чтобы здесь было написано что-то вроде
Очевидно, вам нужно будет скорректировать имена, чтобы они лучше подходили к вашему коду.
Так как Java и MQL основаны на C++, это может вам помочь.
@OP, а также прочитать все ссылки на MQL4, размещенные ранее, см. Работа с двойниками и PrintFormat
@JD4 Я не вижу, как размещение кода Java и ссылки на спецификации Java помогают OP. Также Java и C++ похожи, но я не согласен с тем, что он основан на C++.
Хотя вы пытаетесь быть полезным, я думаю, что многие из ваших ответов, когда вы сами не уверены в ответах, приводят только к запутыванию людей, ищущих помощи.
@OP, а также прочитать все ссылки на MQL4, размещенные ранее, см. Работа с двойниками и PrintFormat
@JD4 Я не вижу, как размещение кода Java и ссылки на спецификации Java помогают OP. Также Java и C++ похожи, но я не согласен с тем, что он основан на C++.
Хотя вы пытаетесь быть полезным, я думаю, что многие из ваших ответов, когда вы сами не уверены в ответах, приводят только к запутыванию людей, ищущих помощи.
Я думаю, вы неправильно поняли мой пост. Mql4 OO, безусловно, основан на c++. Я не думаю, что это можно оспаривать. Я имел в виду ваше утверждение:
JD4: Since Java and MQL are both supposed to be based on C++, this might help you out.
за которым следует множество ссылок на Java. Я сказал -
ydrol: Также Java и C++ похожи, но я не согласен с тем, что он основан на C++.
Я говорил конкретно о ваших ссылках на Java. Java, на мой взгляд, не основана на c++.
В любом случае, тема представления десятичных дробей с плавающей запятой была рассмотрена несколько раз в темах, упомянутых WHRoeder ранее.
Похоже, что OP хочет округлить до двух знаков после запятой, но, не опубликовав никаких результатов или конкретных примеров, я полагаю, что степень ошибки округления, которую они видят, можно игнорировать.
Оба неверны. Он округляет до ближайшего целого числа. Не имеет значения. Возвращает двойное число. 1 = 1.0 = 1.00 = 1.00000 = 1.00000000000000000000000000000000000000000000000000 БЕСКОНЕЧНОЕ ЧИСЛО.
Узнайте о плавающей запятой. Операнд ==. - Форум MQL4
Полагаю, что WH нужно вернуться назад и перечитать, я говорил о том, что страница говорит, что функция делает, а не о том, что она делает на самом деле. И компьютерное программирование - одно из немногих мест, где (int) 1 != (double) 1.00000000 (ad infinitum) в отношении типов данных.
@ ydrol, я пропустил направление вашего намерения с вашим заявлением о MQL/Java/C++. Некоторые справочные материалы для вас, чтобы взглянуть на происхождение Java как языка программирования.
https://en.wikipedia.org/wiki/Java_(язык_программирования)
http://www.freejavaguide.com/history.html
Так как они оба говорят почти одно и то же в отношении C++, я приведу цитату из Вики. "Язык берет большую часть своего синтаксиса от C и C++, но имеет меньше низкоуровневых средств, чем любой из них."
Из той же эпохи"Синтаксис языка определяет его поверхностную форму". (фигурные скобки и т.д.). То, что обсуждается в этой теме, не связано с синтаксисом. Я считаю, что утверждение "Java основана на C++" так же, как и MQL, является гораздо более сильным утверждением, с которым я не согласен.
Но поскольку это качественное утверждение, мы можем быть правы и неправы одновременно. Тем не менее, я не вижу, как спецификации Java помогают ОП, когда уже даны конкретные ссылки с вопросом, и это не был вопрос, связанный с синтаксисом.
Обе статьи, которые вы упомянули, подчеркивают, что Java заимствует синтаксис - но не более того. Это не вопрос, связанный с синтаксисом.
Однако он связан с представлением с плавающей точкойIEEE 754, используемым в MQL, которое также разделяется языками. (и многими другими, которые не имеют синтаксиса, подобного си, например, Pascal, или даже приложениями, такими как Excel), и это действительно потому, что это стандарт, поддерживаемый большинством CPU/FPU, а не синтаксическое сходство языков. Проблема в том, что представление десятичных дробей с плавающей точкой имеет небольшие ошибки. ОП хочет округлить до двух знаков после запятой. ФорматIEEE 754 не может точно хранить одну десятую (0.1) или одну сотую (0.01). В двоичном форматеIEEE 754 это повторяющиеся двоичные дроби (так же, как 1/3 является повторяющейся десятичной дробью 0.33333... ) - разница между задуманным числом и фактическим числом довольно мала (например, 0.00000000000001), но она достаточно велика, так что
1/10 != 0.1 // вероятно.
И int(0.1 * 10) может округлиться не в ту сторону.
Но так как OP не указал, что именно они видят, лучший совет был дан еще в 3-м сообщении этой темы, идите и читайте темы MQL. Я не вижу смысла предлагать им также прочитать спецификации Java после того, как MQL потоки были даны, и они, вероятно, не знакомы с Java.
Краткое содержание темы:
Вышеизложенное было конкретным ответом на ваше конкретное сообщение"MathRound возвращает двойное число; бесконечное количество десятичных знаков. "
Еще раз, согласно странице документации.
"Возвращаемое значение
Значение, округленное до ближайшего целого числа."
Теперь конкретный ответ на эту часть вашего сообщения.
"Что написано на странице, то и делается. Она округляет. Ничего общего с вопросом о нескольких десятичных знаках."
Опять же, перечитайте цитату, там сказано, что возвращается "Значение, округленное до ближайшего целого числа". Целое число, по определению, это целое число, без десятичных знаков. И опять же, если это не то, что оно делает на самом деле, то код или описание нарушены, и одно или другое или оба должны быть исправлены MQ, или иначе предупреждающая надпись, говорящая, что эти функции не работают так, как рекламируется.
Если она действительно возвращает заданный ей тип, но в математическом эквиваленте ближайшего целого числа (например, возвращает 1.00000 из 1.23456, и 1 == 1.00000), но не возвращает фактический тип целого числа, то на странице ссылки нужно указать что-то вроде "не изменяет базовый тип данных" или как-то иначе, чтобы это было четко указано. Я думаю, что это был плоский перевод с оригинальной русской страницы, и как таковой, он не так ясен на английском, как должен быть.