Erros, bugs, perguntas - página 1554

 
-Aleks-:

Uma vez que não obtive uma resposta no outro tópico, vou repetir aqui a pergunta, talvez isto ajude

"

Pode dizer-me, por favor, qual é o meu erro?

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]);

A data da matriz OpenSellTime não está impressa e não é a segunda parte da expressão - PriceOpenSell.

E, não se pode encontrar sobre comandos deimpressão como%G e%d.

"

Embora, qualquer tutorial C também seria bom para si.
 
Alexey Kozitsyn:
Embora, qualquer tutorial C também funcionaria para si.

Obrigado pela resposta, mas a ligação é confusa... Não consigo perceber de imediato - vi este texto na ajuda antes de começar a postar no fórum.

Se bem entendi, %d é ignorar os zeros, se houver, enquanto %G é produzir um valor sem cortar os zeros? Não sou idiota, mas não consigo entender a ajuda e sem entender não consigo entender porque é que o meu cordel não funciona correctamente...

 
-Aleks-:

Obrigado pela resposta, mas a ligação é confusa... Não consigo perceber de imediato - vi este texto na ajuda antes de começar a postar no fórum.

Se bem entendi, %d é ignorar os zeros, se é que existe, enquanto %G é produzir valor sem cortar os zeros? Não sou estúpido, mas não consigo entender a ajuda, e se não a entendo, não consigo entender porque é que o meu cordel não funciona correctamente...

Eu não uso esta função no meu trabalho, mas não acho que seja difícil realizar você mesmo experiências simples.
 
-Aleks-:

Obrigado pela resposta, mas a ligação é confusa... Não consigo perceber de imediato - vi este texto na ajuda antes de começar a postar no fórum.

Se bem entendi, %d é ignorar os zeros, se é que existe, enquanto %G é produzir valor sem cortar os zeros? Não sou estúpido, mas não consigo entender a ajuda, e se não a entendo, não consigo entender porque é que o meu cordel não funciona correctamente...

Leia aqui.
 
Alexey Kozitsyn:
Não utilizo esta função no meu trabalho, mas penso que você mesmo pode facilmente realizar experiências simples.

Mas eu sim - procurei e utilizei-a, mas não consigo perceber a sintaxe exacta, porque não se ajusta à especificação

%[bandeiras][largura][.precisão][{h | l | ll | I32 | I64}]tipo

Não é mencionado no ficheiro de ajuda que nem todos os parâmetros podem ser utilizados. E, o mais importante, não é claro onde tenho um erro de sintaxe, talvez se eles me apontassem, eu compreendesse melhor o assunto.

 
Artyom Trishkin:
Leia-o aqui.

Obrigado. Leia-a com o cursor, procurando a informação certa - acontece que a primeira parte é um modelo e eu enganei-me... certo?

Por exemplo, é necessário especificar os locais onde as variáveis estarão, no meu caso é um índice da matriz, tempo e número do tipo duplo, e depois as próprias variáveis. A partir da lógica do artigo, deveria parecer-se com o seguinte

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]);

Ou será novamente errado?

 
-Aleks-:

Obrigado. Leia-a com o cursor, procurando a informação certa - acontece que a primeira parte é um modelo e eu enganei-me... certo?

Por exemplo, é necessário especificar os locais onde as variáveis estarão, no meu caso é um índice da matriz, tempo e número do tipo duplo, e depois as próprias variáveis. A partir da lógica do artigo, deveria parecer-se com o seguinte

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]);

Ou será novamente errado?

Bem, está lá muito claramente escrito sobre o modelo - os locais onde as variáveis são inseridas são marcados com um sinal de % no modelo. Todo o modelo está encerrado em vírgulas invertidas. Depois, após o próprio modelo, são listadas variáveis separadas por vírgulas que são especificadas no modelo. Por ordem da esquerda para a direita, na ordem em que estão escritos no modelo.

Existem também todas as especificações para os diferentes tipos de variáveis e a sua formatação. Apenas não dê uma vista de olhos, começando com o título"Formatação de cordas no modelo".

 
Artyom Trishkin:

Bem, é muito claro sobre o modelo - os locais onde as variáveis são inseridas são indicados por um sinal de % no modelo. Todo o modelo está encerrado em vírgulas invertidas. Depois, após o próprio modelo, as variáveis do modelo são listadas, separadas por vírgulas. Por ordem da esquerda para a direita, na ordem em que estão escritos no modelo.

Existem também todas as especificações para os diferentes tipos de variáveis e a sua formatação. Basta ler sem dar nas vistas, começando com o título"Formatação de cordas por modelo".

Foi assim que o escrevi - entre aspas o modelo e depois por ordem das variáveis, o que é que está errado?
 
-Aleks-:
Foi assim que o escrevi - entre aspas o modelo e depois as variáveis em ordem, o que é que está errado?

"OpenSellTime[%index deve ser introduzido aqui] = %time, PriceOpenSell[%index] = %price" - é este o padrão?

Se assim for, deveria ser assim:

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

Os valores em si devem ser listados a seguir, separados por vírgulas:

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

total:

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

... bem ... se eu não deixasse nada de fora...

 

MQL4, DoubleToStr() e DoubleToString(). Em DoubleToStr() para o 2º argumento acrescentar "Default 8".

Código:

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

Nos registos, o resultado para eles será = 0,12345679, ou seja, a função arredonda o valor; não está escrito na ajuda. Penso que vale a pena escrever mais sobre isto, ou pelo menos colocar exemplos do género:

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

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

onde o arredondamento será visível.