Ermitteln der Anzahl der Dezimalstellen beliebiger Zahlen (nicht nur Anführungszeichen) unter Umgehung von Digits() in MQL4 und MQL5 - Seite 8

 
Igor Makanu:

Nein, es wird nicht funktionieren...

Oh, richtig, ich vergaß, dass sie wissentlich für Zahlen kleiner als Null gemacht wurde, da sie bei der Losnormalisierung verwendet wurde. Behoben, jetzt ist alles in Ordnung:

#define  EPSILON   0.000000001
#define  MORE(A,B) ((A)-(B)>EPSILON)

int Digit(double value)
  {
   int digits=0;
   value=MathMod(value,1.0);
   while(MORE(1.0/MathPow(10,digits),value)) 
      digits++;
   return(digits);
  }
//+------------------------------------------------------------------+
int DoubleToDigits(double value)
 {
   double absvalue=NormalizeDouble(fabs(value-int(value)),15);
   int res=StringLen(string(absvalue))-2;
   return(res<=0?0:res);
 }
//+------------------------------------------------------------------+
void OnStart()
  {
   double f = 122334550.007;
   Print("1. DoubleToDigits() = ",DoubleToDigits(f));
   Print("1. Digit() = ",Digit(f));
   f = 0.007;
   Print("2. DoubleToDigits() = ",DoubleToDigits(f));
   Print("2. Digit() = ",Digit(f));
  }  

Ergebnis:

2018.11.13 05:18:40.599 Digits (EURUSD,M1)      1. DoubleToDigits() = 11
2018.11.13 05:18:40.599 Digits (EURUSD,M1)      1. Digit() = 3
2018.11.13 05:18:40.599 Digits (EURUSD,M1)      2. DoubleToDigits() = 3
2018.11.13 05:18:40.599 Digits (EURUSD,M1)      2. Digit() = 3
 
Ich werde das Geld, das ich mit Forex verdiene, in eine Jolly Trader Bar investieren. Ich werde es in London eröffnen.
 
Konstantin Gruzdev:

Oh, richtig, ich vergaß, dass sie wissentlich für Zahlen kleiner als Null gemacht wurde, da sie in der Losnormalisierung verwendet wurde. Behoben, jetzt ist alles in Ordnung:

Ergebnis:

Nein, es hat nicht funktioniert.

double f = 122334550.00999;

Ergebnis:

2018.11.13 02:36:31.034 tst (EURUSD,M30) 1. Ziffer() = 3


 
Herr, gib den Kindern dieser Menschen die Möglichkeit, Physik zu lernen.
 
Igor Makanu:

Nein, es hat nicht funktioniert.

Oh, richtig, ich sehe, was falsch ist. Ich bringe es in Ordnung.

 
Алексей Тарабанов:
Herr, gib den Kindern dieser Menschen die Chance, Physik zu lernen.

Warum, wenn die Eltern auch darauf verzichten können?

 

Beantworten Sie sich zunächst selbst die Frage , warum Sie wissen müssen, wie viele Stellen hinter dem Komma stehen. Um was zu tun?

Die einzig richtige Art und Weise, das "Doppelte mit Ziffern" zu verwenden, besteht darin, es mit einer bestimmten Genauigkeit zu verwenden, die im Rahmen des zu lösenden Problems im Voraus bekannt ist.

Alles andere ist Blödsinn.

Ich spreche noch nicht einmal von der Tatsache, dass je größer der Wert von double modulo ist, desto ungenauer ist er und jeder Algorithmus (insbesondere bei der Konvertierung von Zeichenketten, die außerhalb des Rahmens liegt) wird scheitern.

 
Mesaoria:

(insbesondere bei der Konvertierung in eine Zeichenkette, die nicht mehr der Norm entspricht) wird fehlschlagen.

dies sind Codes für MQL, nicht für Standard-C++, es ist offensichtlich, dass in C++ String-Handling träge sein wird, in MQL eingebaute Funktionen sind schneller als selbst geschriebene Funktionen

 
Igor Makanu:

Dies ist Code für MQL, nicht für Standard-C++, es ist offensichtlich, dass in C++ String-Handling träge sein wird, in MQL eingebaute Funktionen sind schneller als selbst geschriebene Funktionen

Das ist nicht das, was ich meinte. Die Idee, einen Würfel in eine Zeichenkette umzuwandeln und dann alle darin enthaltenen Zeichen zu berechnen, ist einfach ein Haufen Mist. Was auch immer Sie tun.

 
Mesaoria:

Davon habe ich überhaupt nicht gesprochen. Die Idee, ein Duble in eine Zeichenkette umzuwandeln, um dann die Zeichen in der Zeichenkette zu zählen, ist völliger Unsinn. Ganz gleich, was Sie tun.

Ja, meine Version ist wahrscheinlich nicht die beste, aber da ich nie etwas darüber gefunden habe - es ist die beste, die mir selbst eingefallen ist, ich habe darüber in den Kommentaren oben geschrieben, und Sie haben nie Ihre eigene Version vorgeschlagen.