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:
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:
Yedelkin: Der Fehler besteht darin, dass die Funktion Print() nicht"Daten vom Typ double mit einer Genauigkeit von 16 Dezimalstellen nach dem Punkt" ausgibt.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Erlauben Sie die Verwendung von Cookies, um sich auf der Website MQL5.com anzumelden.
Bitte aktivieren Sie die notwendige Einstellung in Ihrem Browser, da Sie sich sonst nicht einloggen können.
Sie sind angemeldet. Die Zwei-Faktor-Authentifizierung wurde deaktiviert. Richten Sie sie erneut ein und scannen Sie einen neuen QR-Code oder fahren Sie mit deaktivierter Zwei-Faktor-Authentifizierung fort.
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.