Errores, fallos, preguntas - página 1554

 
-Aleks-:

Como no obtuve respuesta en el otro hilo, repetiré la pregunta aquí, tal vez esto ayude

"

Por favor, pueden decirme cuál es mi error.

for(int i=0;i<N_Sell;i++) printf("OpenSellTime[%d] = %G",i,TimeToString(OpenSellTime[i],TIME_DATE|TIME_MINUTES)," PriceOpenSell[%d] = %G",i,PriceOpenSell[i]);

La fecha de la matriz OpenSellTime no se imprime y no la segunda parte de la expresión - PriceOpenSell.

Y, no puedo encontrar sobre los comandosprintf como%G y%d.

"

Aunque cualquier tutorial de C también te vendría bien.
 
Alexey Kozitsyn:
Aunque cualquier tutorial de C te serviría también.

Gracias por la respuesta, pero el enlace es confuso... No puedo resolverlo de inmediato - vi este texto en la ayuda antes de empezar a publicar en el foro.

Si he entendido bien, %d es para ignorar los ceros, si los hay, mientras que %G es para imprimir un valor sin cortar los ceros? No soy idiota, pero no puedo entender la ayuda y sin entender no puedo entender por qué mi cuerda no funciona correctamente...

 
-Aleks-:

Gracias por la respuesta, pero el enlace es confuso... No puedo resolverlo de inmediato - vi este texto en la ayuda antes de empezar a publicar en el foro.

Si lo he entendido bien, %d es para ignorar los ceros, si los hay, mientras que %G es para emitir el valor sin cortar los ceros? No soy tonto, pero no puedo entender la ayuda, y si no la entiendo no puedo entender por qué mi cadena no funciona correctamente...

No utilizo esta función en mi trabajo, pero no creo que sea difícil realizar experimentos sencillos por uno mismo.
 
-Aleks-:

Gracias por la respuesta, pero el enlace es confuso... No puedo resolverlo de inmediato - vi este texto en la ayuda antes de empezar a publicar en el foro.

Si lo he entendido bien, %d es para ignorar los ceros, si los hay, mientras que %G es para emitir el valor sin cortar los ceros? No soy tonto, pero no entiendo la ayuda, y si no la entiendo, no puedo entender por qué mi cadena no funciona correctamente...

Lea aquí.
 
Alexey Kozitsyn:
Yo no utilizo esta función en mi trabajo, pero creo que usted mismo puede realizar fácilmente experimentos sencillos.

Pero sí - lo he buscado y lo uso, pero no puedo averiguar exactamente la sintaxis, porque no se ajusta a la especificación

%[banderas][ancho][.precisión][{h | l | ll | I32 | I64}]tipo

No se menciona en el archivo de ayuda que no se pueden utilizar todos los parámetros. Y, lo más importante, no está claro dónde tengo un error de sintaxis, quizá si me lo señalaran, entendería mejor el asunto.

 
Artyom Trishkin:
Léalo aquí.

Gracias. Lo he leído de forma superficial, buscando la información correcta - resulta que la primera parte es una plantilla y me la he inventado mal... ¿verdad?

Como, necesitas especificar los lugares donde estarán las variables, en mi caso es un índice del array, tiempo y número de tipo doble, y luego las variables en sí. Según la lógica del artículo, debería ser así

for(int i=0;i<N_Sell;i++) printf("OpenSellTime[%d] = %G, PriceOpenSell[%d] = %G",i,TimeToString(OpenSellTime[i],TIME_DATE|TIME_MINUTES),i,PriceOpenSell[i]);

¿O se equivoca de nuevo?

 
-Aleks-:

Gracias. Lo he leído de forma superficial, buscando la información correcta. Resulta que la primera parte es una plantilla y me la he inventado mal... ¿verdad?

Como, necesitas especificar los lugares donde estarán las variables, en mi caso es un índice del array, tiempo y número de tipo doble, y luego las variables en sí. Según la lógica del artículo, debería ser así

for(int i=0;i<N_Sell;i++) printf("OpenSellTime[%d] = %G, PriceOpenSell[%d] = %G",i,TimeToString(OpenSellTime[i],TIME_DATE|TIME_MINUTES),i,PriceOpenSell[i]);

¿O se equivoca de nuevo?

Bueno, está muy claramente escrito allí sobre la plantilla - los lugares donde se insertan las variables están marcados con un signo % en la plantilla. Toda la plantilla va entre comillas. A continuación, después de la propia plantilla, se enumeran las variables separadas por comas que se especifican en la plantilla. En orden de izquierda a derecha en el orden en que están escritos en la plantilla.

También están todas las especificaciones de los diferentes tipos de variables y su formato. No hay que ojearlo, empezando por el epígrafe"Formato de las cadenas en la plantilla".

 
Artyom Trishkin:

Bueno, está muy claro lo de la plantilla - los lugares donde se insertan las variables se indican con un signo % en la plantilla. Toda la plantilla va entre comillas. A continuación, tras la plantilla propiamente dicha, se enumeran las variables de la misma, separadas por comas. En orden de izquierda a derecha en el orden en que están escritos en la plantilla.

También están todas las especificaciones de los diferentes tipos de variables y su formato. Sólo hay que leer sin mirar, empezando por el título"Formato de cadenas por plantilla".

Así es como lo escribí - entre comillas la plantilla y luego en orden las variables, ¿qué es lo que está mal?
 
-Aleks-:
Así es como lo escribí, entre comillas la plantilla y luego las variables en orden, ¿qué pasa?

"OpenSellTime[%index debe introducirse aquí] = %time, PriceOpenSell[%index] = %price" - ¿es éste el patrón?

Si es así, debería ser así:

"OpenSellTime[%i] = %I64u, PriceOpenSell[%i] = %.5f"

A continuación se enumeran los valores propiamente dichos, separados por comas:

 ,i,OpenSellTime[i],i,PriceOpenSell[i]

total:

printf("OpenSellTime[%i] = %I64u, PriceOpenSell[%i] = %.5f",i,OpenSellTime[i],i,PriceOpenSell[i]);

... Bueno... si no me he dejado nada...

 

MQL4, DoubleToStr() y DoubleToString(). En DoubleToStr() para el segundo argumento añade "Default 8".

Código:

#property strict
void OnStart()
  {
   Print("1) DoubleToStr(0.123456789) = ",DoubleToStr(0.123456789));
   Print("2) DoubleToString(0.123456789) = ",DoubleToString(0.123456789));
  }

En los registros, el resultado para ellos será = 0,12345679, es decir, la función redondea el valor; no está escrito en la ayuda. Creo que merece la pena escribir más sobre esto, o al menos poner ejemplos del tipo:

string value1=DoubleToStr(1.28473418, 5);
// содержимое строки value1 - "1.28473"

string value2=DoubleToStr(1.28473418, 3);
// содержимое строки value2 - "1.285"

donde el redondeo será visible.