Zum Inhalt springen
View in the app

A better way to browse. Learn more.

#T/N/X/T

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

MQL Logik

Geschrieben

Beim coden ist mir etwas aufgefallen was mich an der logik vom MT4 verzweifeln lässt.

Eventuell könnt ihr mir das erklären.


double tmp;
int Ergebnis1, Ergebnis2, Wert=6973;

Ergebnis1=Wert/0.1;
Ergebnis1=MathRound(Ergebnis1/1000);
Ergebnis1=Ergebnis1*1000;
Ergebnis1=Ergebnis1*0.1;

tmp=Wert/0.1;
tmp=MathRound(tmp/1000);
Ergebnis2=tmp;
Ergebnis2=Ergebnis2*1000;
Ergebnis2=Ergebnis2*0.1;

Comment("\nErgebnis1: ",Ergebnis1,
"\nErgebnis2: ",Ergebnis2);
[/Code]

Ergebnis1: 6900

Ergebnis2: 7000

Featured Replies

Geschrieben

Wo siehst du denn einen Fehler? Also ich seh da eigentlich keine Probleme.

 

tmp ist bei dir ein double. Während Ergebnis1 ein Integer ist. Dadurch dürfte die Division im 2. "Päckchen" genauer sein als die oben. Also arbeitest du schon mit komplett anderen Werten. Am Ende legst du tmp wieder in einen Integer. Also wird da wieder was weg/ab/zugerundet.

 

Oder ist meine Logik jetzt falsch? :hrhrhr:

 

Viele Grüße,

Rumpel

Geschrieben
  • Autor

Ich habe mal die Überflüssigen Zeilen entfernt.

  double tmp;
  int Ergebnis1, Ergebnis2, Wert=6973;
  
  Ergebnis1=Wert/0.1; //->69730
  Ergebnis1=MathRound(Ergebnis1/1000); //->MathRound(69.730)->70
  
  tmp=Wert/0.1; //->69730
  tmp=MathRound(tmp/1000); //->MathRound(69.730)->70
  Ergebnis2=tmp; 

  Comment("\nErgebnis1: ",Ergebnis1,
          "\nErgebnis2: ",Ergebnis2);

Ergebnis1: 69

Ergebnis2: 70

Hinter "//" sind meine gedanklichen Zwischenergebnisse. Eventuell kann mich jemand korrigieren und mein "->" berichtigen und auch erklären warum es so ist.

Geschrieben


Ergebnis1=MathRound(Ergebnis1/1000);
[/Code]

hier liegt der Fehler bzw. das Problem. Wenn du ein Integer durch einen Integer teilst (in C), dann ist das Ergebnis immer ein Integer (ohne dass du runden musst)! Die Nachkommastellen werden dann einfach abgeschnitten. Du müsstest also "Ergebnis1/1000.0" schreiben. Dann sollte das gleiche raus kommen, wie in dem anderen Fall. Man sollte deshalb bei Divisionen immer drauf achten, dass mindestens eine der Zahlen ein Double ist!

Geschrieben
  • Autor

Klasse Knochen danke dir.

Gut erklärt so dass sogar ich es verstehe. :hrhrhr:

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

Account

Navigation

Suche

Suche

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.