Integer und Double oder die Hälfte von 5 ist manchmal 2

video
play-sharp-fill

In MQL4 gibt es aus gutem Grund unterschiedliche Datentypen. Wir haben hier eine Funktion die Verdoppeln() heisst und die mit einer Integer-Zahl rechnet indem sie sie hier verdoppelt. Wenn wir die gleiche Funktionsweise jetzt für unsere neue Funktion Halbieren() benutzen möchten gibt es ein Problem, das nicht auf den ersten Blick ersichtlich ist. Zunächst einmal möchten wir, dass unsere neue Funktion auch mit einem Integer-Wert arbeitet und sie soll halbieren heissen. In der Rückgabe return möchten wir gerne unsere übergebene Zahl durch 2 dividieren. Wir hätten gerne die halbe Zahl und wir rufen unsere Funktion Halbieren() auf. Wie man hier sieht, lässt sich das Ganze anstandslos kompilieren. Aber was wird jetzt unser Metatrader ausgeben? Ohh, das scheint zu funktionieren. Unsere halbe Zahl ist eine 1. Auf den ersten Blick kann man also keinen Fehler erkennen, oder? Was aber passiert wenn wir jetzt die Zahl 5 nehmen? Wir kompilieren erneut und jetzt ist die Hälfte von 5 auf einmal 2! Wie lassen sich solche Fehler erklären? Ganz einfach: Wir haben mit ganzen Zahlen gerechnet und die Hälfte von 5 ist 2,5. Unser Datentyp Integer kann aber nur mit ganzen Zahlen rechnen. Um das Problem zu beheben müssen wir alle Integerwerte durch Double-Werte ersetzen. Ich drücke die Steuerungstaste und die H-Taste und ersetze int durch double. Ich möchte gerne alle Vorkommnisse ersetzen und da double ein Fliesskommazahlentyp ist sollten wir jetzt auch ein besseres Ergebnis errechnen können. Nochmal kompilieren und jetzt zeigt unser Metatrader auch das korrekte Ergebnis an. Denn 5 durch 2 ist 2,5. Wer sich beim Rechnen mit den Datentypen vertut kann sehr schnell auf solche Fehler stossen. Im Zweifelsfall ist es immer sinnvoll eine Double-Variable zu verwenden!