Rundung von Zahlen in MT4 über NormalizeDouble - Seite 8

 
Dmitry Fedoseev:

Gut und falsch.

Subtrahieren, Normalisieren auf zwei Ziffern und dann auf eine Ziffer.

Also probieren Sie es aus :)

 
Event:

Also probieren Sie es aus :)

Was gibt es zu versuchen? Das ist ziemlich klar. Das Subtraktionsergebnis ist nicht normalisiert, so dass es manchmal zu Überraschungen kommen kann, wenn Sie nicht auf zwei Stellen normalisieren.
 
Event:

Welche brauchen Sie?

Sie müssendie Länge der Zeichenkette kennen? - Sind Sie sicher, dass Sie die richtigen Zweige haben?

Code?

Wenn es mehr als 2 Zeilen sind, wie bei mir, dann ist Ihr Code komplizierter.

 
Vasyl Nosal:

Code?

Wenn es mehr als 2 Zeilen sind, wie bei mir, dann ist Ihr Code komplizierter.

Sie lesen Ihre Beiträge nicht sorgfältig.

Ich habe Ihnen den Code gegeben - er besteht aus einer Zeile.

 
Event:

Sie lesen die Beiträge nicht sorgfältig.

Ich habe Ihnen den Code gegeben - er enthält eine Zeile.

Das ist cool. So werde ich 1.15 normalise in meinen Code schreiben: )))))))))))))))))))))))))))))))))))))))))))))))))))
 
Vasyl Nosal:

+++

Wenn eine Zahl jedoch länger als 15 Dezimalstellen ist, muss sie trotzdem irgendwie abgeschnitten werden, sonst funktioniert sie nicht richtig.

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   ushort  Characters_delete=15;
   for(int i=0;i<=Characters_delete;i++)
     {
      double v1=1.123456789012345;

      v1=DoubleCrop(v1,i,Characters_delete);

      Print("v1 = ",i," = ",DoubleToString(v1,Characters_delete-i));
     }
   Print("---");
  }
//+------------------------------------------------------------------+
//| Double Crop function                                             |
//+------------------------------------------------------------------+
double DoubleCrop(double value,int ii,ushort  Characters)
  {
   string data="",resoult="";
   data=DoubleToString(value,Characters);
   resoult=StringSubstr(data,0,StringLen(data)-ii);
   return StringToDouble(resoult);
  }
//+------------------------------------------------------------------+
 
Event:

Also probieren Sie es aus :)

Mit Null und mit negativen Zahlen falsch. Mit positiven, überraschenderweise, ohne Überraschungen, richtig.
 

Vasyl Nosal:

extern ushort Characters_delete = 1;

///////////////////////////////////////////
string data=DoubleToString(Bid,Digits);
string resoult=StringSubstr(data,0,StringLen(data)-Characters_delete);  

Heh. Das ist der falsche Weg. Völlig falsche Ergebnisse.
 
Dmitry Fedoseev:
Es ist falsch mit Null und mit negativen Zahlen. Bei positiven, überraschenden, unüberraschenden Ergebnissen ist es richtig.

Negative Werte sollten addiert werden (wenn Normalize beim Runden modulo erhöht).

Und wahrscheinlich nichts mit Null anfangen.

Wenn man es auf ein Zitat anwendet, ist die Wahrscheinlichkeit, dass es <= 0 wird, gering... :)

 
Acht Seiten über Rundungen. Ich glaube, das wurde früher in der vierten Klasse behandelt :(