Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Eu também tentei usar isso sem sucesso. Possivelmente a DTS simplesmente muda a precisão de um valor para a aparência e não o valor real? Não vejo nenhuma outra opção.
Sim, acho que a string apenas torna o valor no duplo uma versão imprimível, mas não o altera. Não tenho certeza de como fazê-lo em MQL, mas sei que em Java você pode forçar uma conversão do tipo de um tipo para outro (neste caso, o dobro para int).
Do oráculo docs em http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html. Esta é apenas uma pequena parte do código apresentado.
No seu caso, acredito que você o faria dizer algo como
Obviamente, você precisaria ajustar os nomes para se adequar melhor ao seu código.
http://www.studytonight.com/java/type-casting-in-java também o cobre lá. Já que Java e MQL são ambos supostamente baseados em C++, isto pode ajudar você.
@OP, bem como a leitura de todos os links MQL4 anteriormente publicados, veja Trabalhando com Duplas e PrintFormat
@JD4 Não vejo como o lançamento de código Java e a referência a especificações Java ajudam a OP. Também Java e C++ são similares, mas não concordo que se baseiem em C++.
Embora você esteja tentando ser útil, acho que muitas de suas respostas quando você mesmo não tem certeza das respostas, só levam a confundir as pessoas que procuram ajuda.
@OP, bem como a leitura de todos os links MQL4 anteriormente publicados, veja Trabalhando com Duplas e PrintFormat
@JD4 Não vejo como o lançamento de código Java e a referência a especificações Java ajudam a OP. Também Java e C++ são similares, mas não concordo que se baseiem em C++.
Embora você esteja tentando ser útil, acho que muitas de suas respostas quando você mesmo não tem certeza das respostas, só levam a confundir as pessoas que procuram ajuda.
Acho que você leu mal meu posto. O Mql4 OO é certamente baseado no c++. Não creio que haja qualquer disputa sobre isso. Eu estava me referindo à sua afirmação:
JD4: Since Java and MQL are both supposed to be based on C++, this might help you out.
seguida de muitas referências Java. Eu disse -
ydrol: Também Java e C++ são similares, mas não concordo que seja baseado em C++
Eu estava falando especificamente de suas referências Java. Java não é baseado em c++ na minha opinião.
Em qualquer caso, o assunto da representação de decimais em ponto flutuante foi abordado várias vezes nos tópicos mencionados anteriormente pela WHRoeder.
Parece que a OP quer arredondar para duas casas decimais, mas sem postar nenhuma saída ou exemplos específicos, acho que o grau de erro de arredondamento que eles estão vendo pode ser ignorado.
Ambos estão errados. Ele arredonda para o número inteiro mais próximo. Irrelevante. Retorna um duplo.
Aprenda sobre o ponto flutuante. O == operando. - Fórum MQL4
Adivinhe o que precisa voltar e reler, eu estava dizendo o que a página dizia que a função fazia, não o que ela realmente faz. E a programação de computadores é um dos poucos lugares onde (int) 1 != (duplo) 1.00000000 (ad infinitum) em relação aos tipos de dados.
@ ydrol, eu perdi a direção de sua intenção com sua declaração re MQL/Java/C++. Algum material de referência para você dar uma olhada em relação à origem do Java como uma linguagem de programação.
https://en.wikipedia.org/wiki/Java_(programming_language)
http://www.freejavaguide.com/history.html
Já que ambos dizem quase a mesma coisa em relação ao C++, postarão do wiki: "A linguagem deriva muito de sua sintaxe do C e C++, mas tem menos facilidades de baixo nível do que qualquer um deles".
Desde a mesma idade"A sintaxe de uma língua define sua forma superficial ". (parênteses encaracolados, etc.). O que está sendo discutido neste tópico não está relacionado à sintaxe. Minha opinião é que dizer "Java é baseado em C++" da mesma forma que MQL é, é uma afirmação muito mais forte da qual eu discordo.
Mas como se trata de uma declaração qualitativa, podemos estar certos e errados ao mesmo tempo. Ainda não vejo como as especificações Java ajudam a OP, quando já há uma ligação específica com a questão e esta não foi uma questão relacionada à sintaxe.
Ambos os artigos que você menciona , enfatizam que Java toma emprestado da sintaxe - mas pouco mais. Esta não é uma questão relacionada com a sintaxe.
Entretanto, está relacionada à representação de ponto flutuanteIEEE 754 utilizada pela MQL, que também é compartilhada pelas linguagens. (e muitas outras que não têm c como sintaxe - por exemplo Pascal, ou mesmo aplicações como Excel) e isto é realmente porque é um padrão suportado pela maioria das CPU/FPU em vez de similaridades sintáticas das linguagens. A questão é que a representação de ponto flutuante de frações decimais tem pequenos erros. O OP quer arredondar para duas casas decimais. O formatoIEEE 754 não pode armazenar com precisão um décimo (0,1) nem um centésimo (0,01). No formato binárioIEEE 754 estas são frações binárias recorrentes, (da mesma forma que 1/3 é uma fração decimal recorrente 0,33333... ) - A diferença entre o número pretendido e o número real é bastante pequena (por exemplo 0,00000000000001 ), mas é grande o suficiente para que
1/10 != 0,1 // provavelmente
E int(0.1 * 10) pode dar a volta errada
Mas como a OP não postou exatamente o que está vendo, os melhores conselhos foram dados no terceiro post deste assunto, vá e leia os tópicos do MQL. Não vejo a utilidade de sugerir que eles também leiam as especificações Java depois que as threads MQL são dadas e provavelmente não têm nenhuma familiaridade com Java.
Resumo das threads:
O acima foi uma resposta específica ao seu posto específico"MathRound retorna um duplo; número infinito de casas decimais". "
Mais uma vez, de acordo com a página de documentação.
"Valor de retorno
Valor arredondado até o número inteiro mais próximo."
Agora, uma resposta específica a esta parte do seu posto.
"O que a página diz, é o que ela faz". Ela é redonda. Nada a ver com a questão das múltiplas casas decimais."
Mais uma vez, releia a citação, ela diz que retorna "Valor arredondado até o inteiro mais próximo". Um inteiro, por definição, é um número inteiro, como em nenhuma casa decimal. E mais uma vez, se isto não for de fato o que realmente faz, então o código ou a descrição é quebrado, e um ou outro ou ambos precisam ser fixados pela MQ, ou então uma etiqueta de advertência afirmando que estas funções não funcionam como anunciado.
Se ele realmente retorna o tipo que é dado, mas no equivalente matemático ao valor inteiro mais próximo (como nos retornos 1,00000 de um 1,23456, e 1 == 1,00000) mas não retorna um tipo inteiro real, então a página de referência precisa especificar algo como "não muda o tipo de dado subjacente" ou alguma outra forma que seja claramente declarada.