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
Und lassen wir die Frage nach den Fehlern von Print() offen? :)
Wie auch immer.
GUT. Dann werde ich die Nerven behalten. So heißt es in der Beschreibung der Funktion Print(), dass "Daten vom Typ double mit einer Genauigkeit von 16 Dezimalstellen nach dem Komma gedruckt werden". Es stellt sich nämlich heraus, dass die Funktion Print() etwas gerundete Daten ausgibt:
void OnStart() { double a,b; a=7.0/200.0; b=7.0/a; Print("Print(b)=",b); Print("Print(DoubleToString(b,16))=",DoubleToString(b,16)); }MP 0 victorg2 (EURUSD,M1) 11:04:42 Druck(DoubleToString(b,16))=199.9999999999999716
GUT. Dann werde ich die Nerven behalten. So heißt es in der Beschreibung der Funktion Print(), dass "Daten vom Typ double mit einer Genauigkeit von 16 Dezimalstellen nach dem Komma gedruckt werden". Es stellte sich heraus, dass die Funktion Print() leicht gerundete Daten erzeugt:
MP 0 victorg2 (EURUSD,M1) 11:04:42 Druck(DoubleToString(b,16))=199.999999999999999716
123.4567890123456(7>5, daher aufgerundet)
Alles scheint auf die Beschreibung zu passen. Wo liegt das Problem? Werden die Nullen nicht gedruckt?
Der Fehler besteht darin, dass die Funktion Print() nicht"Daten vom Typ double mit einer Genauigkeit von 16 Dezimalstellen nach dem Punkt" ausgibt.
siehe
Print("Print(b)="+ b);siehe
Ich habe mir nicht die Mühe gemacht, das zu überprüfen.
Zunächst einmal erzeugt der Compiler "implizite Konvertierung von 'Zahl' nach 'String' victorg2.mq5 12 22".
Zweitens,
IS 0 victorg2 (EURUSD,M1) 17:46:45 Print(b)=200
PJ 0 victorg2 (EURUSD,M1) 17:46:45 Print(DoubleToString(b,16))=199.9999999999999716
Verwenden Sie die entsprechende PrintFormat-Funktion für eine vollständige Formatkontrolle:
Beim Drucken wird standardmäßig der normale Rundungsmodus mit zwei bis vier Ziffern verwendet. Wir werden die Dokumentation korrigieren.Bitte geben Sie Zeiger (Handles) auf Strukturen an (vorzugsweise auch auf Arrays, einschließlich statischer Arrays).
Das Einwickeln in Klassen ist oft eine schlechte Lösung:
2012.04.07 20:49:38 SizeOf_Test (USDJPY,M30) sizeof(SEmpty) = 0
Bitte geben Sie Zeiger (Handles) auf Strukturen an (vorzugsweise auch auf Arrays, einschließlich statischer Arrays).
Was meinen Sie und warum?
1. in welchem Sinne und
2. Warum?
1.
CEmpty *C[]; // Это работает. SEmpty *S[]; // Error: 'SEmpty' - class type expected SizeOf_Test.mq5 19 1Um Arrays von Zeigern auf Strukturen (Arrays) zu erstellen. mit anschließender Initialisierung for(i){ S[i] = GetPointer(StaticStruct[i]); }
2. solide (gepackte) Arrays mit aussagekräftigen Daten zu speichern.
Wichtig bei der Datenausgabe in OpenCL-Rohpuffern (oder beim Senden an DLL, Schreiben in Dateien usw.)
Gleichzeitig ist es möglich, Datenzugriffe neu zu ordnen (z. B. beim Sortieren von Zeigern), ohne die Daten neu zu schreiben.