Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 474

 
Alexey Viktorov:
Eso no es todo... https://www.mql5.com/ru/forum/66827
Extraño hombre agradable... Oh, bueno...
 
¿Cómo puedo saber el valor real de una variable de tipo double? La cuestión es que a veces las milésimas son arrojadas por la impresión - la propia variable se forma a partir de una cadena de texto, pero pasa por un procedimiento de redondeo.
 
-Aleks-:
¿Cómo puedo saber el valor real de una variable de tipo double? La cosa es que a veces se tiran miles de dígitos a través de la impresión - la propia variable se forma a partir de una cadena de texto, pero pasa por un procedimiento de redondeo.
Ejem. ¿Para qué lo necesitas?
 
Alexey Kozitsyn:
Ejem. ¿Para qué lo necesitas?
Para detectar un error de cálculo :)
 
-Aleks-:
Para detectar un error de cálculo :)
¿Desea comparar varios valores de tipo double?
 
Alexey Kozitsyn:
¿Quiere comparar varios valores de tipo double?
En realidad no... se supone que los números no siempre tienen un valor entero de 4=3,999999999999999 y se forma una inexactitud después de las operaciones matemáticas tras el redondeo.
 

Por favor, pueden enviar mensajes de correo electrónico desde el terminal Metatrader 4 de tal manera que se tome una captura de pantalla del gráfico actual y se ponga en el centro del mensaje. Ejemplo:

Hubo una señal de compra en el EurUsd

<скриншот09122015_eurusd.png>

Información adicional sobre la apertura.

¿Dime cómo ponerlo en práctica? Tal vez haya un ejemplo o algo similar que se pueda rehacer. Gracias.
 
-Aleks-:
No del todo... hay una suposición de que los números no siempre tienen un valor entero de 4=3,999999999999999 y después de hacer las cuentas, se obtiene una inexactitud después de redondear.

Aunque aparezcan imprecisiones, utilice NormalizeDouble(). Establezca la precisión que desea para sus cálculos. Para eso sirve esta función.

El ejemplo parece describir su caso:

Debe tener en cuenta que el número normalizado cuando se imprime en el Diario utilizando Print() puede contener más decimales de los que espera. Por ejemplo,

DoubleToString(a,8)=76.67100000

Print(76.671)=76.67100000000001

 
Alexey Kozitsyn:

Aunque aparezcan imprecisiones, utilice NormalizeDouble(). Establezca la precisión que desea para sus cálculos. Para eso sirve esta función.

El ejemplo parece describir su caso:

Sí - descrito, sí - lo uso - la pregunta es sólo cómo no a través de la impresión y en la cadena general para obtener datos para el análisis :)
 
-Aleks-:
Sí - se describe, sí - lo uso - la pregunta es cómo no a través de la impresión y la cadena en general para obtener datos para el análisis :)

Utilizando el mismo NormalizeDouble(). Se obtiene un número de tipo doble. Normalizado. Simplemente, Print() lo muestra así.

Aquí está escrito cómo hacer la comparación correctamente: https://www.mql5.com/ru/docs/basis/types/double

Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
  • www.mql5.com
Основы языка / Типы данных / Вещественные типы (double, float) - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5