Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 154
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Das heißt, Sie müssen 1,33182 in 1,3318 umrechnen? Sie würden einfach die 5. Stelle nach dem Komma abschneiden oder auf die 4. Stelle aufrunden, z. B. 1,3318 oder 1,3319 statt 1,33186?
Meine Frage ist, ob es einen Fehler gibt oder nicht. Bei der Umwandlung von double in int in meinem Beispiel ist das Ergebnis eins weniger. Bitte überprüfen Sie dies selbst.
DerAlert sollte 13318 ausgeben, aber er gibt 13317 aus. Wenn nicht auf int gerundet wird, ergibt dies korrekt 13318,0.Sagen Sie mir, ob es einen Unterschied in den Ausdrücken gibt:
и
Sagen Sie mir, ob es einen Unterschied in den Ausdrücken gibt:
и
Wenn Sie den Verdacht haben, dass etwas nicht in Ordnung ist, machen Sie es wahr:
Meine Frage ist, ob es einen Fehler gibt oder nicht. Bei der Umwandlung von double in int in meinem Beispiel ist das Ergebnis eins weniger. Bitte überprüfen Sie das mit sich selbst.
Alert sollte 13318 ausgeben, gibt aber 13317 aus. Also wenn nicht auf int zu reduzieren, dann gibt korrekt 13318.0 ausbewirkt, dass die Nachkommastellen verworfen und nicht gerundet werden (d. h. ähnlich wie bei MathFloor() statt MathRound()), und in Ihrem Fall könnte die normierte Zahl genau 13318, aber 13317,99999999999999997 lauten.
die bei der Ausgabe in Bruchform mit begrenzter Anzahl von Ziffern eine Rundung auf das richtige (erwartete) Ergebnis bewirkt, und wenn der Bruchteil von.... verworfen wird sehen Sie selbst.
Ich hoffe, ich habe mich klar ausgedrückt.
Gibt es ein Analogon zum Sharp's Partial? oder wie kann man es machen?
Es gibt kein Analogon. Sie können einen Teil der Definition mit #include <partial_class_code.mqh> einbetten.
Manche Menschen imitieren auf diese Weise sogar die Mehrfachvererbung // Ich tue das nicht, ich habe mich daran gewöhnt, ohne sie auszukommen. :)
Wenn Sie den Verdacht haben, dass etwas nicht in Ordnung ist, sollten Sie es melden:
Das habe ich bereits getan. Ich bin nur neugierig.
Ich verstehe. Um auf Ihre vorherige Frage zurückzukommen, kann die Essenz der Aufzeichnung zu diesem Vergleich herangezogen werden:
Es gibt keinen Unterschied zwischen diesen Einträgen. Gleichzeitig empfehle ich, dass Sie mathematische Berechnungen in if-os einklammern:
if (A<=(B1+B2*B3) && C<=(D1-D2*D3))
Die Meldung führt nicht zu einem Fehler. Der Punkt ist, dass die Normalisierung einer Zahl zu einer binären Form führt, die dem gewünschten dezimalen Analogon am nächsten kommt, während sie nicht unbedingt in einer größeren oder kleineren (in Ihrem Fall) Richtung mit ihm übereinstimmt. Da das, was durch einen endlichen Dezimalbruch ausgedrückt wird, nicht immer durch einen endlichen Binärbruch ausgedrückt werden kann . Expression
führt dazu, dass der Bruchteil verworfen und nicht gerundet wird (d.h. es sieht eher aus wie MathFloor() als MathRound()), und in Ihrem Fall könnte die normalisierte Zahl eher 13317.99999999999999997 als genau 13318 sein.
die bei der Ausgabe in Bruchform mit begrenzter Anzahl von Ziffern eine Rundung auf das richtige (erwartete) Ergebnis bewirkt, und wenn der Bruchteil von.... verworfen wird sehen Sie selbst.
Ich hoffe, ich habe mich klar ausgedrückt.
Danke, ich verstehe.
Noch eine Frage: Wie kann ich das bekämpfen, wenn ich nicht auf die Umwandlung in int verzichten kann?
Vielen Dank, ich verstehe.
Eine andere Frage: Wie gehen Sie damit um, wenn Sie nicht auf die Überweisung nach int verzichten können?
und man fügt ein paar Epsilons hinzu.
DBL_EPSILON
Die kleinste Zahl, für die die Bedingung 1.0+DBL_EPSILON != 1.0 erfüllt ist