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

 
void OnStart()
{
        double price =  500000000.0001;
        Print( price, ":", d( price ));
}

Ergebnis: 500000000.0001:4

4, aber nicht 8

 
Na gut, dann... Baden Sie in dieser Freude, wenn Sie sie mögen.
 
A100:

Sie haben es erraten. Und wie viele Nachkommastellen gibt es? 8?

Ich muss nicht getestet werden.

  Print(NormalizeDouble(1234567890 + 1 e-7, 8) == 1234567890); // true
  Print(1234567890 + 1 e-7 == 1234567890); // true
 
fxsaber:

Ich muss nicht kontrolliert werden.

Trotzdem haben Sie Ihren Code korrigiert - die Überprüfung war also hilfreich

 
Drucken ( 12345+1e-7)
 
A100:

Dennoch haben Sie Ihren Code korrigiert

Sehen Sie sich an, woher der Code stammt. Und für welchen praktischen Zweck sie gedacht war. Wenn es nicht klar ist - für die Preise.

Der Code war nicht narrensicher, da er nicht für die Verwendung durch einen solchen Benutzer gedacht war.

Im Laufe der Diskussion stellte sich heraus, dass bei einer Veröffentlichung des Codes eine Absicherung erfolgen muss. Sonst werden es 5 Seiten voller Scheiße.

Also, in der Tat, korrigiert. Auch hier sind Zahlen mit unendlich vielen Ziffern die Norm.

 
Dmitry Fedoseev:

Ich weiß, wie NormalizeDouble funktioniert, weil ich die vollständige Analogie gespielt habe.

Es kommt sehr darauf an, welche Ziffern Sie erhalten möchten. Bei Doppeldarstellung ergibt Ihr Code einen anderen Wert. Wenn Ziffern einer numerischen Konstante, ist es richtig (und nicht immer).

 
Jetzt geht's wieder los mit den Droppern...
 
fxsaber:

Es kommt ganz darauf an, was Sie brauchen.

Sie brauchen eine

int f( double );

so dass (insbesondere)

void OnStart()
{
        Print( f( NormalizeDouble( 500000000.0001, 4 )));
}

Das Ergebnis ist gleich: 4

 
A100:

Sie brauchen eine

zu

Das Ergebnis war: 4

Vielleicht ist das genau die Funktion, die Sie brauchen. Antwortet dem TS.