Kann Preis != Preis ? - Seite 8

 

Für diejenigen, die durch alle Reifen gesprungen sind und alle Lösungen ausprobiert haben, hier ist das, was ich als recht zuverlässige Lösung für mich selbst geschrieben habe.

Wenn Sie immer noch auf der Suche nach einer Lösung sind, bedeutet dies, dass Sie auf etwas wie dieses gestoßen sind:

Der Vergleich von 107,123111111 und 107,123999 führt dazu, dass 107,123 mit 107124 verglichen wird, was auf eine doppelte Rundungsabweichung zurückzuführen ist.

Hier ist meine Lösung für dieses Problem, die den Bereich von +1 und -1 außer Acht lässt, um die doppelte Rundungsabweichung aus dem Vergleich zu entfernen.


Versuchen Sie dies:

      // double compare by leoa451
        int 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) { return 0; }         // if doubleA within +1/-1 range of doubleB (to compensate for the double rounding veriance)
         else if(IntForDoubleA < IntForDoubleB) { return 1; }                                           // if doubleA < doubleB
         else if(IntForDoubleA > IntForDoubleB) { return 2; }                                           // if doubleA > doubleB
         else return -2;                                                                                // error
      }
 

Und hier ist eine weitere Lösung, wenn man einfach zwei Doubles vergleicht und ein boolsches Ergebnis benötigt:

// return true if same double value within digits comparison
bool CompareDoubleEqual(double a, double b, int digits)
{
   if (MathAbs(a - b) > MathPow(10, -digits))
      return(false);

   return(true);
}
 
Dretta: Und hier ist eine weitere Lösung, wenn man einfach zwei Doubles vergleicht und ein boolsches Ergebnis benötigt:
  1. Wenn sie sich um einen Punkt unterscheiden, erhalten Sie true. Das ist falsch - sie sind nicht gleich.

  2. Vereinfachen Sie

    bool CompareDoubleEqual(double a, double b, int digits)
    {
       return MathAbs(a - b) < MathPow(10, -digits);
    }
    Order nach Stoploss erhöhen - MQL4 Programmierforum #1.3 2017.05.29