Ermitteln der Anzahl der Dezimalstellen beliebiger Zahlen (nicht nur Anführungszeichen) unter Umgehung von Digits() in MQL4 und MQL5
Ich denke, ich bin nicht der einzige, der eine seltene Situation, wo ich brauchte, um die Anzahl der Dezimalstellen zu erhalten, und Digits() Funktion funktioniert nur mit Anführungszeichen, und außerdem gibt es keine Informationen über sie irgendwo (zumindest zum Zeitpunkt des Schreibens dieses Beitrags fand ich es vor, so möchte ich zeigen, welche Lösung ich gefunden).
Wie sich herausstellte, ist die Essenz banal einfach, hat aber dennoch einen Nachteil - diese Funktion erkennt keine Nullen, wenn nach ihnen keine weiteren Ziffern stehen. Zum Beispiel gibt die Funktion 2 zurück, wenn sie von 0,01 gefolgt wird, aber wenn sie von 0,0000 gefolgt wird, gibt sie 0 zurück (was bedeutet, dass sie keine vier Nullen sehen kann). Daher sollten Sie dieses Manko bei Ihren Entwicklungen berücksichtigen.
Der Code in MQL5 musste leicht verbessert werden, da in MQL5 Variablen vom Typ double am Ende automatisch 0 zugewiesen werden, egal ob die Variable einer ganzen Zahl zugewiesen ist oder nicht. Aus diesem Grund hat die Funktion noch nie 0 zurückgegeben.
Angenommen, wir geben die Zahl 2,4875 ein und die Funktion liefert 4.
Was sollen wir damit tun? Etwas, das ich nicht verstehe(
Ich denke, ich bin nicht der einzige, der eine seltene Situation, wo ich brauchte, um die Anzahl der Dezimalstellen zu erhalten, und Digits() Funktion funktioniert nur mit Anführungszeichen, und außerdem gibt es keine Informationen über sie irgendwo (zumindest zum Zeitpunkt des Schreibens dieses Beitrags fand ich es vor, so möchte ich zeigen, welche Lösung ich gefunden).
Wie sich herausstellte, ist die Essenz banal einfach, hat aber dennoch einen Nachteil - diese Funktion erkennt keine Nullen, wenn nach ihnen keine weiteren Ziffern stehen. Zum Beispiel gibt diese Funktion 2 zurück, wenn sie von 0,01 gefolgt wird, aber wenn sie von 0,0000 gefolgt wird, gibt sie 0 zurück (was bedeutet, dass sie keine vier Nullen sehen kann). Berücksichtigen Sie also dieses Manko bei Ihren Entwicklungen.
Code in MQL4
Der Code bei MQL5
Der MQL5-Code musste geringfügig verbessert werden, da offenbar in MQL5 Variablen vom Typ double am Ende automatisch 0 zugewiesen wird, unabhängig davon, ob die Variable eine ganze Zahl ist oder nicht. Aus diesem Grund hat die Funktion noch nie 0 zurückgegeben.
string string_value = (string)value;
lesen Sie nicht weiter :-)
Angenommen, wir geben die Zahl 2,4875 ein, dann gibt die Funktion 4 zurück.
Was sollen wir damit tun? Ich scheine den Sinn nicht zu verstehen(
Je nachdem, wer was braucht. Ich brauchte zum Beispiel ganze Zahlen, um den Korrelationsindex leichter berechnen zu können
Sie brauchen nicht weiter zu lesen :-)
Was ist hier für einen Programmierer nicht klar?)
Wenn überhaupt, gibt es eine StringFind()-Funktion, so dass es nicht nötig ist, eine Schleife durch die Zeichen zu ziehen, um sie zu finden.
danke
int GetDigits( double Price ) { int Res = 0; while ((bool)(Price = ::NormalizeDouble(Price - (int)Price, 8)) && (Res < 8)) { Price *= 10; Res++; } return(Res); }
auch eine gute Lösung
auch eine gute Lösung
Eine gute Lösung funktioniert in der Regel richtig
void OnStart() { double price = 500000000.0001; Print( price, ":", GetDigits( price )); }
Ergebnis: 500000000.0001:8
Wie viele Stellen nach dem Komma? Sind es wirklich 8?
Eine gute Lösung funktioniert in der Regel richtig
Ergebnis: 500000000.0001:8
Wie viele Stellen nach dem Komma? Sind es wirklich acht?
Ja, acht.
![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Ich denke, ich bin nicht der einzige, der eine seltene Situation, wo ich brauchte, um die Anzahl der Dezimalstellen zu erhalten, und Digits() Funktion funktioniert nur mit Anführungszeichen, und außerdem gibt es keine Informationen über sie irgendwo (zumindest zum Zeitpunkt des Schreibens dieses Beitrags habe ich nicht gefunden, bevor, so möchte ich zeigen, welche Lösung ich gefunden habe).
Wie sich herausstellte, das Wesen der banalen einfach, aber immer noch einen Nachteil hat - diese Funktion nicht erkennen Nullen, wenn nach ihnen gibt es keine anderen Ziffern. Zum Beispiel gibt die Funktion 2 zurück, wenn sie von 0,01 gefolgt wird, aber wenn sie von 0,0000 gefolgt wird, gibt sie 0 zurück (d.h. sie kann keine vier Nullen sehen). Berücksichtigen Sie also dieses Manko bei Ihren Entwicklungen.
Code in MQL4
Der Code bei MQL5
Der MQL5-Code musste geringfügig verbessert werden, da offenbar in MQL5 Variablen vom Typ double am Ende automatisch 0 zugewiesen wird, unabhängig davon, ob die Variable eine ganze Zahl ist oder nicht. Aus diesem Grund hat die Funktion nie 0 zurückgegeben.