
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
Ich habe auch gerade versucht, dies zu verwenden, ohne Erfolg. Möglicherweise ändert DTS einfach die Genauigkeit eines Wertes für das Aussehen und nicht den tatsächlichen Wert? Ich sehe keine anderen Optionen.
Ja, ich denke, die Zeichenkette macht den Wert im Double nur zu einer druckbaren Version davon, ändert ihn aber nicht. Ich bin mir nicht sicher, wie man das in MQL macht, aber ich weiß, dass man in Java eine Typumwandlung von einem Typ in einen anderen erzwingen kann (in diesem Fall von Double in Int).
Aus den Oracle-Dokumenten unter http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html. Dies ist nur ein kleiner Teil des vorgestellten Codes.
In Ihrem Fall würden Sie ihn etwa so formulieren
Natürlich müssten Sie die Namen anpassen, damit sie besser zu Ihrem Code passen.
http://www.studytonight.com/java/type-casting-in-java deckt es auch dort ab. Da Java und MQL beide auf C++ basieren sollen, könnte Ihnen das helfen.
@OP sowie das Lesen aller zuvor geposteten MQL4-Links siehe Arbeiten mit Doubles und PrintFormat
@JD4 Ich sehe nicht, wie das Posten von Java-Code und der Verweis auf Java-Spezifikationen dem OP hilft. Auch Java und C++ sind ähnlich, aber ich stimme nicht zu, dass es auf C++ basiert.
Obwohl Sie versuchen, hilfreich zu sein, denke ich, dass viele Ihrer Antworten, wenn Sie sich selbst nicht sicher sind, nur dazu führen, dass die Hilfesuchenden verwirrt werden.
@OP sowie das Lesen aller zuvor geposteten MQL4-Links siehe Arbeiten mit Doubles und PrintFormat
@JD4 Ich sehe nicht, wie das Posten von Java-Code und der Verweis auf Java-Spezifikationen dem OP hilft. Auch Java und C++ sind ähnlich, aber ich stimme nicht zu, dass es auf C++ basiert.
Obwohl Sie versuchen, hilfreich zu sein, denke ich, dass viele Ihrer Antworten, wenn Sie sich selbst nicht sicher sind, nur dazu führen, dass die Hilfesuchenden verwirrt werden.
Ich glaube, Sie haben meinen Beitrag falsch verstanden. Mql4 OO basiert sicherlich auf C++, das ist wohl unbestritten. Ich habe mich auf Ihre Behauptung bezogen:
JD4: Since Java and MQL are both supposed to be based on C++, this might help you out.
gefolgt von vielen Java-Referenzen. Ich sagte -
ydrol: Auch Java und C++ sind ähnlich, aber ich stimme nicht zu, dass es auf C++ basiert.
Ich habe mich speziell auf Ihre Java-Referenzen bezogen. Java basiert meiner Meinung nach nicht auf C++.
Auf jeden Fall wurde das Thema der Darstellung von Dezimalstellen in Fließkommazahlen bereits mehrfach in den von WHRoeder erwähnten Threads behandelt.
Es sieht so aus, als wolle OP auf zwei Dezimalstellen runden, aber ohne eine Ausgabe oder spezifische Beispiele zu posten, nehme ich an, dass der Grad des Rundungsfehlers, den sie sehen, ignoriert werden kann.
Beides falsch. Es wird auf die nächste ganze Zahl gerundet. Irrelevant. Es gibt einen Double zurück . 1 = 1.0 = 1.00 = 1.00000 = 1.000000000000000000000000000000000000000000 UNENDLICH VIELE ZIFFERN
Lernen Sie über Gleitkomma. Der == Operand. - MQL4-Forum
Ich schätze, WH muss zurückgehen und noch einmal lesen, ich sagte, was die Seite sagte, dass die Funktion tat, nicht was sie tatsächlich tut. Und Computerprogrammierung ist einer der wenigen Orte, wo (int) 1 != (double) 1.00000000 (ad infinitum) in Bezug auf Datentypen.
@ ydrol, ich habe mit Ihrer Aussage zu MQL/Java/C++ nicht ganz verstanden, worauf Sie hinauswollen. Hier finden Sie einige Informationen über den Ursprung von Java als Programmiersprache.
https://en.wikipedia.org/wiki/Java_(programmier_sprache)
http://www.freejavaguide.com/history.html
Da beide fast das Gleiche in Bezug auf C++ sagen, werde ich aus Wiki posten: "The language derives much of its syntax from C and C++, but it has less low-level facilities than either of them."
Aus dem gleichen Zeitalter: "Die Syntax einer Sprache definiert ihre Oberflächenform.". (geschweifte Klammern usw.). Was in diesem Thread diskutiert wird, hat nichts mit der Syntax zu tun. Meiner Meinung nach ist die Aussage "Java basiert auf C++" in der gleichen Weise wie MQL, eine viel stärkere Aussage , der ich nicht zustimme.
Da es sich aber um eine qualitative Aussage handelt, können wir beide gleichzeitig Recht und Unrecht haben. Ich sehe immer noch nicht, wie die Java-Spezifikationen dem OP helfen, wenn es bereits einen spezifischen Link zu diesem Thema gibt und es sich nicht um eine syntaxbezogene Frage handelt.
Beide Artikel, die Sie erwähnen, betonen, dass Java Anleihen bei der Syntax macht - aber wenig anderes. Dies ist kein syntaxbezogenes Problem.
Es hängt jedoch mit derIEEE 754 Fließkommadarstellungzusammen, die von MQL verwendet wird und die auch von den anderen Sprachen genutzt wird. (und viele andere, die keine C-ähnliche Syntax haben - z. B. Pascal oder sogar Anwendungen wie Excel), und das liegt wirklich daran, dass es sich um einen Standard handelt, der von den meisten CPUs/FPUs unterstützt wird, und nicht an den syntaktischen Ähnlichkeiten der Sprachen. Das Problem ist, dass die Fließkommadarstellung von Dezimalbrüchen kleine Fehler aufweist. Der Auftraggeber möchte auf zwei Dezimalstellen runden. Das IEEE-754-Format kann weder ein Zehntel (0,1) noch ein Hundertstel (0,01) genau speichern. Im IEEE-754-Binärformat sind dies wiederkehrende binäre Brüche (so wie 1/3 ein wiederkehrender Dezimalbruch 0,33333 ist...) - Der Unterschied zwischen der beabsichtigten Zahl und der tatsächlichen Zahl ist recht klein (z. B. 0,00000000000001), aber groß genug, damit
1/10 != 0.1 // wahrscheinlich
Und int(0.1 * 10) könnte falsch gerundet sein.
Aber da OP nicht genau gepostet hat, was er sieht, wurde der beste Rat schon im 3. Beitrag dieses Themas gegeben: Lesen Sie die MQL-Threads. Ich sehe keinen Sinn darin, auch noch vorzuschlagen, dass sie die Java-Spezifikationen lesen sollen, nachdem die MQL-Threads gegeben wurden und sie wahrscheinlich keine Vertrautheit mit Java haben.
Zusammenfassung des Threads:
Das obige war eine spezifische Antwort auf Ihren spezifischen Beitrag"MathRound gibt einen Double zurück; unendliche Anzahl von Dezimalstellen."
Noch einmal, laut der Dokumentationsseite.
"Rückgabewert
Wert gerundet auf die nächste ganze Zahl."
Nun eine konkrete Antwort auf diesen Teil Ihres Beitrags.
"Was auf der Seite steht, wird auch gemacht. Sie rundet. Das hat nichts mit der Frage nach mehreren Dezimalstellen zu tun."
Lesen Sie noch einmal das Zitat, dort steht "Wert gerundet auf die nächste ganze Zahl". Eine ganze Zahl ist per Definition eine ganze Zahl, also ohne Nachkommastellen. Und noch einmal, wenn das nicht das ist, was sie tatsächlich tut, dann ist der Code oder die Beschreibung fehlerhaft, und das eine oder das andere oder beides muss von MQ korrigiert werden, oder es muss ein Warnhinweis erscheinen, der besagt, dass diese Funktionen nicht wie angekündigt funktionieren.
Wenn sie tatsächlich den Typ zurückgibt, der ihr vorgegeben wird, aber mit dem mathematischen Äquivalent des nächsten ganzzahligen Wertes (z. B. gibt sie 1,00000 von 1,23456 zurück, und 1 == 1,00000), aber sie gibt keinen tatsächlichen ganzzahligen Typ zurück, dann muss auf der Referenzseite etwas angegeben werden wie "ändert den zugrunde liegenden Datentyp nicht" oder etwas anderes, das klar angegeben ist. Ich denke, das war eine flache Übersetzung von der russischen Originalseite, und als solche ist es nicht so klar auf Englisch, wie es sein sollte.