Размер позиции, возвращающий отрицательное значение - страница 2

 
NoLimitations:

Я также только что попробовал использовать это безрезультатно. Возможно, DTS просто изменяет точность значения для внешнего вида, а не фактическое значение? Я не вижу других вариантов.

Да, я думаю, что строка просто делает значение в double версией для печати, но не изменяет его. Не уверен, как это сделать в MQL, но я знаю, что в Java можно принудительно преобразовать тип из одного типа в другой (в данном случае double в int).

Из документации oracle по адресу http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html. Это лишь небольшая часть представленного кода.

// Casting conversion (5.4) of a float literal to
// type int. Without the cast operator, this would
// be a compile-time error, because this is a
// narrowing conversion (5.1.3):
int i = (int)12.5 f;
// String conversion (5.4) of i's int value:
System.out.println("(int)12.5f==" + i);

В вашем случае, я полагаю, вы могли бы сделать так, чтобы здесь было написано что-то вроде

int intConvertedDouble = (int) valueYouGotItFrom;

Очевидно, вам нужно будет скорректировать имена, чтобы они лучше подходили к вашему коду.

Так как Java и MQL основаны на C++, это может вам помочь.

 

@OP, а также прочитать все ссылки на MQL4, размещенные ранее, см. Работа с двойниками и PrintFormat

@JD4 Я не вижу, как размещение кода Java и ссылки на спецификации Java помогают OP. Также Java и C++ похожи, но я не согласен с тем, что он основан на C++.

Хотя вы пытаетесь быть полезным, я думаю, что многие из ваших ответов, когда вы сами не уверены в ответах, приводят только к запутыванию людей, ищущих помощи.

 
ydrol:

@OP, а также прочитать все ссылки на MQL4, размещенные ранее, см. Работа с двойниками и PrintFormat

@JD4 Я не вижу, как размещение кода Java и ссылки на спецификации Java помогают OP. Также Java и C++ похожи, но я не согласен с тем, что он основан на C++.

Хотя вы пытаетесь быть полезным, я думаю, что многие из ваших ответов, когда вы сами не уверены в ответах, приводят только к запутыванию людей, ищущих помощи.

Что касается ваших мыслей о C++, посмотрите на https://www.mql5.com/en/docs/basis. Там об этом говорится, и поскольку они модифицировали MQL4, чтобы сделать его более похожим на MQL5(https://docs.mql4.com/mql4changes), это применимо и здесь. Что касается моей базы знаний, я никогда не претендовал на роль эксперта, и я даю людям знать об этом, когда пишу, если я не уверен в чем-то, по крайней мере, я стараюсь, но иногда могу промахнуться.Если я вожу Шевроле, и у меня с ним проблемы, я не собираюсь сидеть здесь и отвергать советы того, кто работает только с Фордами, если это полезный совет, даже если он может быть не совсем верным. Я также не буду сидеть здесь и говорить им, что не думаю, что вы можете помочь, если они делают это, пытаясь быть полезными.
 

Я думаю, вы неправильно поняли мой пост. 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 хочет округлить до двух знаков после запятой, но, не опубликовав никаких результатов или конкретных примеров, я полагаю, что степень ошибки округления, которую они видят, можно игнорировать.

 
JD4: Не в соответствии со страницей документации. https://docs.mql4.com/math/mathround
NoLimitations: JD4 прав, на странице документации сказано, что он округляет до ближайшего целого числа.

Оба неверны. Он округляет до ближайшего целого числа. Не имеет значения. Возвращает двойное число. 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.

Краткое содержание темы:

  • OP: Числа ведут себя странно
  • WHRoeader: Вот несколько ссылок с несколькими объяснениями, почему плавающие точки странные. < Ответ где-то здесь ...
  • OP: Я понял их, но числа все равно ведут себя забавно.
  • JD4: MQL4 и Java основаны на C++, вот несколько непонятных ссылок на Java о типизации и продвижении, которые даже Java-разработчики сочтут тяжелым чтением.
  • ydrol: Как именно это помогает OP? Я не согласен, что Java основана на C++ Ответы были опубликованы некоторое время назад...
  • и т.д. и т.п.

 
Я разместил информацию о способе приведения типов в Java по двум причинам. Во-первых, по общему признанию, потому что я лучше знаком с Java. И во-вторых, я провел поиск кода, и, возможно, потому что я устал, когда делал это, я не увидел, как это сделать в документации MQL. Поэтому, чтобы попытаться быть полезным, я предложил возможное решение, которое, как я был уверен, будет работать, основываясь на предположениях, что MQL и Java достаточно близки друг к другу, учитывая их общие сравнения с общим языком, C++.
 
JD4: Видимо, WH нужно вернуться и перечитать, я говорил, что на странице написано, что делает функция, а не что она делает на самом деле.
  1. Возможно, вам стоит вернуться и перечитать вопрос.
    NoLimitations: Почему я все еще получаю ответы с несколькими знаками после запятой, если я использую MathRound()?
    Что написано на странице, то она и делает. Он округляет. Ничего общего с вопросом о множественных десятичных знаках.
  2. Множественные десятичные знаки - это то, что происходит, когда вы печатаете двойное число без указания требуемого количества.
 
WHRoeder:
JD4: Видимо, WH нужно вернуться и перечитать, я говорил, что на странице сказано, что функция делает, а не что она делает на самом деле.
  1. Возможно, вам стоит вернуться и перечитать вопрос.
    NoLimitations: Почему я все еще получаю ответы с несколькими знаками после запятой, если я использую MathRound()?
    Что написано на странице, то она и делает. Он округляет. Ничего общего с вопросом о множественных десятичных знаках.
  2. Множественные десятичные знаки - это то, что происходит, когда вы печатаете двойное число без указания необходимого количества.

Вышеизложенное было конкретным ответом на ваше конкретное сообщение"MathRound возвращает двойное число; бесконечное количество десятичных знаков. "

Еще раз, согласно странице документации.

"Возвращаемое значение

Значение, округленное до ближайшего целого числа."

Теперь конкретный ответ на эту часть вашего сообщения.

"Что написано на странице, то и делается. Она округляет. Ничего общего с вопросом о нескольких десятичных знаках."

Опять же, перечитайте цитату, там сказано, что возвращается "Значение, округленное до ближайшего целого числа". Целое число, по определению, это целое число, без десятичных знаков. И опять же, если это не то, что оно делает на самом деле, то код или описание нарушены, и одно или другое или оба должны быть исправлены MQ, или иначе предупреждающая надпись, говорящая, что эти функции не работают так, как рекламируется.

Если она действительно возвращает заданный ей тип, но в математическом эквиваленте ближайшего целого числа (например, возвращает 1.00000 из 1.23456, и 1 == 1.00000), но не возвращает фактический тип целого числа, то на странице ссылки нужно указать что-то вроде "не изменяет базовый тип данных" или как-то иначе, чтобы это было четко указано. Я думаю, что это был плоский перевод с оригинальной русской страницы, и как таковой, он не так ясен на английском, как должен быть.

Причина обращения: