Redondear números en MT4 mediante NormalizeDouble - página 8

 
Dmitry Fedoseev:

Bien y mal.

Resta, normaliza a dos dígitos y luego a uno.

Así que pruébalo :)

 
Event:

Así que pruébalo :)

¿Qué hay que probar? Está bastante claro. El resultado de la resta no está normalizado, por lo que a veces habrá sorpresas si no se normaliza a dos dígitos.
 
Event:

¿Cuál necesita?

¿necesitas saberla longitud de la cuerda? - ¿Está seguro de que tiene las ramas correctas?

¿Código?

Si son más de 2 líneas como las mías, entonces tu código es más complicado.

 
Vasyl Nosal:

¿Código?

Si son más de 2 líneas como las mías, entonces tu código es más complicado.

No estás leyendo tus mensajes con atención.

Te he dado el código - tiene una línea.

 
Event:

No estás leyendo los mensajes con atención.

Te he dado el código - tiene una línea en él.

Eso es genial. Voy a escribir 1.15 normalizar en mi código así:)))))))))))))))))))))))))))))))))))))))))))))))))))
 
Vasyl Nosal:

+++

Sin embargo, si un número tiene más de 15 decimales, debe ser truncado de alguna manera, de lo contrario no funcionará correctamente.

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

Así que pruébalo :)

Con cero y con números negativos mal. Con positivos, sorprendentemente, sin sorpresas, correctos.
 

Vasyl Nosal:

extern ushort Characters_delete = 1;

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

Je. Es el camino equivocado. Resultados totalmente erróneos.
 
Dmitry Fedoseev:
Se equivoca con el cero y con los números negativos. Con los positivos, sorprendentemente, sin sorpresas, es correcto.

Los negativos deben sumarse (si Normalizar aumenta el módulo al redondear).

Y probablemente no hacer nada con cero.

Si se aplica a una cotización - la probabilidad de que sea <= 0 es pequeña... :)

 
Ocho páginas sobre el redondeo. Creo que eso se cubría en cuarto grado :(
Razón de la queja: