Arrotondamento dei numeri in MT4 tramite NormalizeDouble - pagina 8

 
Dmitry Fedoseev:

Bene e male.

Sottrarre, normalizzare a due cifre e poi a una.

Quindi provalo :)

 
Event:

Quindi provalo :)

Cosa c'è da provare? È abbastanza chiaro. Il risultato della sottrazione non è normalizzato, quindi a volte ci saranno sorprese se non si normalizza a due cifre.
 
Event:

Di quale avete bisogno?

hai bisogno di saperela lunghezza della stringa? - Sei sicuro di avere i rami giusti?

Codice?

Se sono più di 2 righe come la mia, allora il tuo codice è più complicato.

 
Vasyl Nosal:

Codice?

Se sono più di 2 righe come la mia, allora il tuo codice è più complicato.

Non stai leggendo attentamente i tuoi post.

Vi ho dato il codice - ha una sola linea.

 
Event:

Non stai leggendo attentamente i messaggi.

Ti ho dato il codice - c'è una linea dentro.

Questo è forte. Scriverò 1.15 normalise nel mio codice così:)))))))))))))))))))))))))))))))))))))))))))))))))))
 
Vasyl Nosal:

+++

Tuttavia, se un numero è più lungo di 15 cifre decimali, deve comunque essere troncato in qualche modo, altrimenti non funzionerà correttamente.

//+------------------------------------------------------------------+
//| 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:

Quindi provalo :)

Con zero e con numeri negativi sbagliati. Con quelli positivi, sorprendentemente, senza sorprese, corretto.
 

Vasyl Nosal:

extern ushort Characters_delete = 1;

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

Heh. Questo è il modo sbagliato. Risultati completamente sbagliati.
 
Dmitry Fedoseev:
Si sbaglia con lo zero e con i numeri negativi. Con quelli positivi, sorprendentemente, senza sorprese, è corretto.

Quelli negativi devono essere aggiunti (se Normalize aumenta il modulo quando si arrotonda).

E probabilmente non fare nulla con zero.

Se applicato a una quotazione - la sua probabilità di diventare <= 0 è piccola... :)

 
Otto pagine sull'arrotondamento. Penso che sia stato coperto in quarta elementare :(