Print

Imprime un mensaje en el registro del Asesor Experto. Los parámetros pueden tener cualquier tipo.

void  Print(
   argument,     // el primer valor
   ...           // siguientes valores
   );

Parámetros

...

[in]  Cualquieres valores separados por comas. El número de parámetros no puede superar 64.

Nota

No se puede pasar los arrays a la función Print(). Los arrays deben imprimirse elemento por elemento.

Los datos del tipo double se visualizan con la precisión de hasta 16 dígitos decimales después del punto, además, los datos pueden ser visualizados en el formato tradicional o científico, dependiendo de cuál de ellos va a ser más compacto. Los datos del tipo float se visualizan con 5 dígitos decimales después del punto. Para visualizar los números reales con otra precisión o en un formato explícitamente especificado hay que usar la función PrintFormat().

Los datos del tipo bool se visualizan como cadenas "true" o "false". Las fechas se visualizan como YYYY.MM.DD HH:MI:SS. Para conseguir otro formato de fecha hay que usar la función TimeToString(). Los datos del tipo color se visualizan como cadena R,G,B, o usando el nombre del color si está presente en el juego de colores.

Durante el trabajo en el Probador de Estrategias en el modo de optimización, la función Print() no se ejecuta.

Ejemplo:

void OnStart()
  {
//--- imprimimos DBL_MAX utilizando Print(), esto equivale a PrintFormat(%%.16G,DBL_MAX)
   Print("---- como se ve DBL_MAX -----");
   Print("Print(DBL_MAX)=",DBL_MAX);
//--- ahora imprimimos el número DBL_MAX utilizando PrintFormat()
   PrintFormat("PrintFormat(%%.16G,DBL_MAX)=%.16G",DBL_MAX);
//--- Impresión en el diario "Asesores Expertos"
// Print(DBL_MAX)=1.797693134862316e+308
// PrintFormat(%.16G,DBL_MAX)=1.797693134862316E+308
 
//--- vamos a ver cómo se imprime el tipo float
   float c=(float)M_PI// hay que convertir explícitamente al tipo de meta
   Print("c=",c, "    Pi=",M_PI"    (float)M_PI=",(float)M_PI);
// c=3.14159    Pi=3.141592653589793    (float)M_PI=3.14159
   
//--- mostraremos lo que puede pasar durante las operaciones aritméticas con los tipos reales
   double a=7,b=200;
   Print("---- antes de las operaciones aritméticas");
   Print("a=",a,"   b=",b);
   Print("Print(DoubleToString(b,16))=",DoubleToString(b,16));
//--- vamos a dividir a por b (7/200)
   a=a/b;
//--- ahora como si hubieramos restaurado el valor en la variable b
   b=7.0/a; // se espera que b=7.0/(7.0/200.0)=>7.0/7.0*200.0=200 - pero eso no es así
//--- vamos a imprimir otra vez el valor calculado b
   Print("----- después de las operaciones aritméticas");
   Print("Print(b)=",b);
   Print("Print(DoubleToString(b,16))=",DoubleToString(b,16));
//--- impresión en el diario "Asesores Expertos"
// Print(b)=200.0
// Print(DoubleToString(b,16))=199.9999999999999716 (vemos que en realidad b ya no es igual a 200.0)   
 
//--- vamos a crear un valor muy pequeño epsilon=1E-013
   double epsilon=1e-13;
   Print("---- vamos a crear un número muy pequeño");
   Print("epsilon=",epsilon); // obtenemos   epsilon=1E-013
//--- ahora restamos el épsilon del número b e imprimimos otra vez el valor en el diario "Expertos"
   b=b-epsilon;
//--- imprimimos de dos maneras
   Print("---- después de la sustracción de epsilon de la variable b");
   Print("Print(b)=",b);
   Print("Print(DoubleToString(b,16))=",DoubleToString(b,16));
//--- impresión en el diario "Expertos"
// Print(b)=199.9999999999999  (ahora el valor b después de la sustracción del épsilon puede ser redondeado hasta 200)
// Print(DoubleToString(b,16))=199.9999999999998578
//    (ahora el valor b después de la sustracción del épsilon no puede ser redondeado hasta 200)
  }

Véase también

DoubleToString, StringFormat