Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 474

 
Alexey Viktorov:
Isso não é tudo... https://www.mql5.com/ru/forum/66827
Estranho homem simpático... Oh, bem...
 
Como saber o valor real de uma variável de tipo duplo? A questão é que por vezes os milésimos são deitados fora por impressão - a variável em si é formada a partir de um fio de texto, mas passa por um procedimento de arredondamento.
 
-Aleks-:
Como saber o valor real de uma variável de tipo duplo? O problema é que, por vezes, milhares de dígitos são deitados fora através da impressão - a variável em si é formada a partir de um fio de texto, mas passa por um procedimento de arredondamento.
Para que precisa dele?
 
Alexey Kozitsyn:
Ahem. Para que é que precisa dele?
Para detectar um erro nos cálculos :)
 
-Aleks-:
Para detectar um erro no cálculo :)
Quer comparar múltiplos valores de tipo duplo?
 
Alexey Kozitsyn:
Quer comparar vários valores do tipo duplo?
Nem por isso... há uma hipótese de que os números nem sempre têm um valor inteiro de 4=3,99999999999999999999999 e forma-se uma imprecisão após operações matemáticas após arredondamento.
 

Pode por favor enviar mensagens de e-mail do terminal Metatrader 4 de tal forma que uma captura de ecrã do gráfico actual seja tirada e colocada no meio da mensagem. Exemplo:

Havia um sinal de compra na EurUsd

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

Informação adicional sobre a abertura.

Diz-me como implementar isto? Talvez haja um exemplo ou algo semelhante que possa ser refeito. Obrigado!
 
-Aleks-:
Não é bem assim... há uma suposição de que os números nem sempre têm um valor inteiro de 4=3,9999999999999999999 e depois de fazer as contas, obtém-se uma inexactidão após o arredondamento.

Mesmo que a inexactidão apareça, usar NormalizeDouble(). Defina a precisão desejada para os seus cálculos. É para isto que serve esta função.

O exemplo ali parece descrever o seu caso:

Deve estar ciente de que o número normalizado quando a saída para o Jornal utilizando Print() pode conter mais casas decimais do que se espera. Por exemplo,

DoubleToString(a,8)=76.67100000

Print(76.671)=76.67100000000001

 
Alexey Kozitsyn:

Mesmo que a inexactidão apareça, usar NormalizeDouble(). Defina a precisão desejada para os seus cálculos. É para isto que serve esta função.

O exemplo ali parece descrever o seu caso:

Sim - descrito, sim - eu utilizo-o - a questão é como não através da impressão e, em geral, da cadeia de caracteres para obter dados para análise :)
 
-Aleks-:
Sim - está descrito, sim - eu utilizo-o - a questão é como não através da impressão e da cadeia em geral para obter dados para análise :)

Usando o mesmo NormalizeDouble(). Recebe-se um número de tipo duplo. Normalizado. Simplesmente imprimir() produz assim.

Aqui está escrito como fazer a comparação correctamente: https://www.mql5.com/ru/docs/basis/types/double

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