Normalización de doubles

La API de MQL5 proporciona una función para redondear números de coma flotante a una precisión especificada (el número de dígitos significativos en la parte fraccionaria).

double NormalizeDouble(double number, int digits)

El redondeo es necesario en los algoritmos de trading para fijar volúmenes y precios en órdenes. El redondeo se realiza según las reglas estándar: el último dígito visible se incrementa en 1 si el siguiente dígito (descartado) es mayor o igual que 5.

Valores válidos del parámetro digits: 0 a 8.

Encontrará ejemplos de utilización de la función en el archivo ConversionNormal.mq5.

void OnStart()
{
   Print(M_PI);                      // 3.141592653589793
   Print(NormalizeDouble(M_PI16)); // 3.14159265359
   Print(NormalizeDouble(M_PI8));  // 3.14159265
   Print(NormalizeDouble(M_PI5));  // 3.14159
   Print(NormalizeDouble(M_PI1));  // 3.1
   Print(NormalizeDouble(M_PI, -1)); // 3.14159265359
   ...

Debido al hecho de que cualquier número real tiene una precisión de representación interna, el número puede mostrarse de forma aproximada aunque esté normalizado:

   ...
   Print(512.06);                    // 512.0599999999999
   Print(NormalizeDouble(512.065));// 512.0599999999999
   Print(DoubleToString(512.065)); // 512.06000000
   Print((float)512.06);             // 512.06
}

Esto es normal e inevitable. Para un formato más compacto, utilice las funciones DoubleToString, StringFormat o conversión intermedia a (float).

Para redondear un número hacia arriba o hacia abajo al número entero más próximo, utilice las funciones MathRound, MathCeil, MathFloor (véase la sección Funciones de redondeo).