Lógica simples não está funcionando para comparar o resulado de um float

 
float trix1 = trix[1];
float trix2 = trix[2];

Print("trix1: "+trix1, " trix2: "+trix2);

if(trix1 > trix2)
{
 Print("trix1 é maior que trix2");
}
else
 if(trix1 < trix2)
   {
	Print("trix1 é menor que trix2");
   }
 else
   {
	Print("trix1 é igual a trix2");
   }

Nó código acima era pra ele imprimir "trix1 é igual a trix2", mas podemos ver abaixo que não é o que acontece.

trix1: -0.00004 trix2: -0.00004
trix1 é maior que trix2

Nesse caso era pra printar "trix1 é igual a trix2".

Alguém sabe o que estou fazendo de errado?

Triple Exponential Average - Osciladores - Ajuda para o MetaTrader 5
Triple Exponential Average - Osciladores - Ajuda para o MetaTrader 5
  • www.metatrader5.com
Triple Exponential Average (TRIX) foi desenvolvido por Jack Hutson como um oscilador das condições do mercado de...
 
moslley:

....

Difícil saber e poder afirmar qualquer coisa, ate mesmo pq o precisa saber qual o valor dessas variáveis. Falar apenas pelo if seria apenas achismo.

 
moslley:

Nó código acima era pra ele imprimir "trix1 é igual a trix2", mas podemos ver abaixo que não é o que acontece.

Nesse caso era pra printar "trix1 é igual a trix2".

Alguém sabe o que estou fazendo de errado?


Mosley, putz mostra o valor em trix[1] e em  trix[2], coopera né maninho,  certamente trix[1] > trix[2]´, e  tem ainda o casting para string que arredonda  última decimal.

 

Trix[] é um buffer?

Se sim, por que vc usou Float?


https://www.mql5.com/en/docs/basis/types/double

Documentation on MQL5: Language Basics / Data Types / Real Types (double, float)
Documentation on MQL5: Language Basics / Data Types / Real Types (double, float)
  • www.mql5.com
Real Types (double, float) - Data Types - Language Basics - MQL5 Reference - Reference on algorithmic/automated trading language for MetaTrader 5
 
Rogerio Giannetti Torres #:


Mosley, putz mostra o valor em trix[1] e em  trix[2], coopera né maninho,  certamente trix[1] > trix[2]´, e  tem ainda o casting para string que arredonda  última decimal.

Os valores de trix[1] e trix[2] foram mostados na postagem: 

trix1: -0.00004 trix2: -0.00004
Flavio Jarabeck #:

Trix[] é um buffer?

Se sim, por que vc usou Float?


https://www.mql5.com/en/docs/basis/types/double

Sim, é um buffer do indicador nativo trix. Eu usei float pq usando double estava me retornando isso abaixo e não estava me retornando os valores mostrados no indicador, que são:  trix1: -0.00004 trix2: -0.00004
PS: Parece que o resultado padrão do indicador TRIX é float tb.

trix1: -3.726660517523728e-05 trix2: -3.91269275909384e-05
trix1 é maior que trix2
 
moslley:

Nó código acima era pra ele imprimir "trix1 é igual a trix2", mas podemos ver abaixo que não é o que acontece.

Nesse caso era pra printar "trix1 é igual a trix2".

Alguém sabe o que estou fazendo de errado?

comparando float/double com exatidao, tem que definir uma faixa de aceitacao e comparar se ta dentro dela.

Esse mesmo "problema" ocorre em java e em c ate hoje que tu coloca numa variavel 0.3 + 0.3 + 0.3 e testa o valor por 0.9 e ele diz que eh falso. Ele na verdade eh 0.89999999999 que nao eh 0.9, obviamente.

 
moslley #:

Os valores de trix[1] e trix[2] foram mostados na postagem: 

Sim, é um buffer do indicador nativo trix. Eu usei float pq usando double estava me retornando isso abaixo e não estava me retornando os valores mostrados no indicador, que são:  trix1: -0.00004 trix2: -0.00004
PS: Parece que o resultado padrão do indicador TRIX é float tb.

Decida qual precisão você precisa e use NormalizeDouble().

;)

Razão: