Para aqueles que saltaram por todos os obstáculos e tentaram todas as soluções aqui está o que escrevi como uma solução bastante confiável para mim mesmo.
Se você ainda está em busca de solução, isto significa que se deparou com algo assim:
A coparing 107.123111111 e 107.123999 faz com que 107.123 seja comparado com 107124 como resultado de uma dupla variação de arredondamento.
Aqui está minha solução para este problema que desconsidera a variação de +1 e -1 para remover a dupla variação de arredondamento da comparação.
Tente isto:
// double compare by leoa451int CompDoubleE0L1M2(double DoubleA, double DoubleB, int PointsToCompare)
{
int IntForDoubleA = (int)(MathFloor(MathPow(10,PointsToCompare) * DoubleA));
int IntForDoubleB = (int)(MathFloor(MathPow(10,PointsToCompare) * DoubleB));
if(IntForDoubleA >= IntForDoubleB-1 && IntForDoubleA <= IntForDoubleB+1) { return0; } // if doubleA within +1/-1 range of doubleB (to compensate for the double rounding veriance)elseif(IntForDoubleA < IntForDoubleB) { return1; } // if doubleA < doubleBelseif(IntForDoubleA > IntForDoubleB) { return2; } // if doubleA > doubleBelsereturn -2; // error
}
E aqui está outra solução se simplesmente comparar duas duplas e requerer um resultado de bool:
// return true if same double value within digits comparisonbool CompareDoubleEqual(double a, double b, int digits)
{
if (MathAbs(a - b) > MathPow(10, -digits))
return(false);
return(true);
}
Para aqueles que saltaram por todos os obstáculos e tentaram todas as soluções aqui está o que escrevi como uma solução bastante confiável para mim mesmo.
Se você ainda está em busca de solução, isto significa que se deparou com algo assim:
A coparing 107.123111111 e 107.123999 faz com que 107.123 seja comparado com 107124 como resultado de uma dupla variação de arredondamento.
Aqui está minha solução para este problema que desconsidera a variação de +1 e -1 para remover a dupla variação de arredondamento da comparação.
Tente isto:
E aqui está outra solução se simplesmente comparar duas duplas e requerer um resultado de bool:
Se eles diferem por um ponto, você retorna verdadeiro. O que é errado - eles não são iguais.
Simplifique
Aumentar pedido após perda - Fórum de programação MQL4 #1.3 2017.05.29