Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools  
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4008
Beiträge: 38194
Benutzer: 6.319
Aktive Benutzer: 323
Links: 80
Wir begrüßen unseren neuesten Benutzer: Abdelaliii
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor einer Stunde
- Abdelaliii
vor 2 Tagen
- Cavalino
vor 4 Tagen
- Minz90
vor 5 Tagen
- Arudo
vor 5 Tagen
- Laotsele

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 75
Gesamt: 75
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 18.04.18
Mitglied
 
Registriert seit: Dec 2013
Beiträge: 54
freitag befindet sich auf einem aufstrebenden Ast
Standard NormalizeDouble nicht wirklich

Hin und wieder berechnet mein NormalizeDouble-Befehl falsch.

Beispiel:
y=NormalizeDouble(x,2);
- da kommt dann ein Wert wie 95.400000000000000001

Kennt dieses Problem noch jemand und weiß einen Rat dafür?
Mit Zitat antworten
  #2 (permalink)  
Alt 18.04.18
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.066
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von freitag Beitrag anzeigen
Hin und wieder berechnet mein NormalizeDouble-Befehl falsch.

Beispiel:
y=NormalizeDouble(x,2);
- da kommt dann ein Wert wie 95.400000000000000001

Kennt dieses Problem noch jemand und weiß einen Rat dafür?
Mittels Print(DoubleToStr(y, 2)); wird dann nur ausgegeben:

95,4

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #3 (permalink)  
Alt 19.04.18
Mitglied
 
Registriert seit: Dec 2013
Beiträge: 54
freitag befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
Mittels Print(DoubleToStr(y, 2)); wird dann nur ausgegeben:

95,4

traderdoc

Ich muss den Wert in eine String bringen und mehere davon dann zu einer Kette aneinanderreihen, bevor ich sie anzeigen lasse. Darum geht das, glaube ich, nicht.
Mit Zitat antworten
  #4 (permalink)  
Alt 19.04.18
Mitglied
 
Registriert seit: Jun 2013
Beiträge: 233
Ca$hDigger befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von freitag Beitrag anzeigen
Hin und wieder berechnet mein NormalizeDouble-Befehl falsch.

Beispiel:
y=NormalizeDouble(x,2);
- da kommt dann ein Wert wie 95.400000000000000001

Kennt dieses Problem noch jemand und weiß einen Rat dafür?
Das ist kein Fehler sondern völlig normal. Der Umgang mit Fließkommazahlen in einer Programmiersprache hat mit Zahlen im "normalen" Leben nur wenig zu tun. Eine Fließkommazahl wird aus einer Mantisse und einem Exponenten dargestellt.
Siehe: https://de.wikipedia.org/wiki/Gleitkommazahl
Mit Zitat antworten
  #5 (permalink)  
Alt 19.04.18
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.066
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Ca$hDigger Beitrag anzeigen
Das ist kein Fehler sondern völlig normal. Der Umgang mit Fließkommazahlen in einer Programmiersprache hat mit Zahlen im "normalen" Leben nur wenig zu tun. Eine Fließkommazahl wird aus einer Mantisse und einem Exponenten dargestellt.
Siehe: https://de.wikipedia.org/wiki/Gleitkommazahl

Na ja, ich denke hier hätte MetaQuotes etwas sorgsamer proggen müssen, denn diese kleine Fehlerchen können gravierende Fehler nach sich ziehen.
Bis zu der Stelle, wo die Fließkommazahl letztendlich errechnet wird, gebe ich Dir recht. Aber wenn per NormalizeDouble die Fließkommazahl z.B. auf 2 oder mehreren Stellen reduziert werden soll, dann kann das Ergebnis nicht 95.400000000000000001 lauten. Regelmäßige Fehler treten ja auf, wenn Fließkommazahlen als Price in OrderSend() angegeben werden, ohne! vorher NormalizeDouble verwendet zu haben, auch wenn man denkt, laut Mathematik, dass z.B. aus einer Division eine Zahl resultiert die dem Price-Format der Funktion OrderSend () entspricht. Erst mit NormalizeDouble(Wert, Digits) würde die Fließkommazahl maximal die Kommastellen haben, die dem Wert von Digit entspricht. Und dann tritt auch nie ein OrderSend-Fehler auf.
Daher denke ich, dass diese krumme Zahl 95.400000000000000001 nach der Anwendung von y=NormalizeDouble(x,2); als 95,4 vorliegt, nur durch die Anzeigefunktionen Alert() oder Print() werden solche krummen Zahlen angezeigt. Abhilfe schaft hier wiederum die bereits erwähnte Funktion DoubleToStr(Wert, 2).

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #6 (permalink)  
Alt 19.04.18
Mitglied
 
Registriert seit: Jun 2013
Beiträge: 233
Ca$hDigger befindet sich auf einem aufstrebenden Ast
Standard

Unmittelbar nach NormalizeDouble sollte für die interne Verarbeitung der Wert schon passen aber sobald damit nur eine Sache gemacht wird treten diese "normalen" Ungenauigkeiten auf.

In der Doku steht ja auch "Please note that when output to Journal using the Print() function, a normalized number may contain a greater number of decimal places than you expect."

Insofern ist das mit dem Print tatsächlich ein unnötiger Effekt auch wenn der Wert intern eigentlich stimmen würde. Daher der Weg über DoubleToStr ist dann für die Darstellung prima.

C$D
Mit Zitat antworten
  #7 (permalink)  
Alt 19.04.18
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.066
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Ca$hDigger Beitrag anzeigen
Unmittelbar nach NormalizeDouble sollte für die interne Verarbeitung der Wert schon passen aber sobald damit nur eine Sache gemacht wird treten diese "normalen" Ungenauigkeiten auf.

In der Doku steht ja auch "Please note that when output to Journal using the Print() function, a normalized number may contain a greater number of decimal places than you expect."

Insofern ist das mit dem Print tatsächlich ein unnötiger Effekt auch wenn der Wert intern eigentlich stimmen würde. Daher der Weg über DoubleToStr ist dann für die Darstellung prima.

C$D
Ja, das Entscheidende hatte ich doch gerade vorher geschrieben!

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #8 (permalink)  
Alt 20.04.18
Mitglied
 
Registriert seit: Dec 2013
Beiträge: 54
freitag befindet sich auf einem aufstrebenden Ast
Standard

Danke für Eure interessante Diskussion.
Damit hab ichs verstanden:

DoubleToStr(x, 2) wir mein Leben bereichern!
Mit Zitat antworten
  #9 (permalink)  
Alt 20.04.18
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.066
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Immer wieder schön zu sehen, wie man mit Kleinigkeiten Glückseeligkeit bereiten kann.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
mql4, normalizedouble, normalizedouble wert, programmierung, programmierung metatrader, programmierung mql4, variable, variablen


Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +2. Es ist jetzt 12:15 Uhr.



Der Wavesnode - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2018 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2017 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------