boa tarde!
Por mais que eu leia esta seção de Ajuda, ainda não consigo descobrir de onde vem aquela fracionária 1 no final.
Tenha em mente que quando um número normalizado é impresso para o Jornal usando Print(), ele pode conter mais casas decimais do que você espera. Por exemplo,
duplo a=76.671;// número normalizado com 3 casas decimais
Print("Print(76.671)=",a);// imprimir como está
Print("DoubleToString(a,8)=",DoubleToString(a,8));// imprimir com a precisão especificadaé emitido no terminal:
DoubleToString(a,8)=76.67100000
Print(76.671)=76.67100000000001
O tipo duplo tem limitações de precisão devido às quais podem ocorrer erros.
Eu recomendo este artigo: https://www.mql5.com/ru/articles/1561
- 2009.11.02
- MetaQuotes Software Corp.
- www.mql5.com
O tipo duplo tem limitações na precisão, o que pode levar a erros.
Eu recomendo este artigo: https://www.mql5.com/ru/articles/1561
Eu vejo a recomendação, obrigado.
Você pode usar o DoubleToStr na saída
mas não está claro de onde essa está vindo em primeiro lugar!
Se eu estava fazendo divisão/multiplicação, OK, está tudo bem, é um erro.
Mas em uma constante? que eu mesmo prescrevi?
Acontece que tenho que usar arredondamento para uma constante que inicialmente não tem essa precisão
e o mais importante, a confiança no que está de fato armazenado na variável dupla é minada!
Citação da documentação
Необходимо помнить, что вещественные числа хранятся в памяти компьютера с некоторой ограниченной точностью в двоичной системе счисления, в то время как общепринятой в использовании является десятичная система счисления. Поэтому многие числа, которые точно записываются в десятичной системе, в двоичной системе можно записать только в виде бесконечной дроби.
Por exemplo, os números 0,3 e 0,7 são representados no computador como frações infinitas, enquanto o número 0,25 é armazenado exatamente como se fosse uma potência de dois.
interessante...
Já estou supondo que não esteja em MQL, mas em algum lugar mais profundo, no nível dos padrões dos anos 80
mas ainda muito estranho...
Não o vi em nenhuma outra língua de aplicação
seria razoável ter algumas soluções ao nível da própria linguagem MQL
e ainda não explica porque o código abaixo dá 0000000001 caudas
current=NormalizeDouble(GlobalVariableGet("Equity-"+portfolio_id),2);
text = "Positions closed at " + (string)current + " for portfolio: " + portfolio_name;
if(!automatic) MessageBox(text,""); else Print(text);
porque eu fiz a normalização
e o número continua a ser seguido.
interessante...
Já estou supondo que não se trata de MQLs, mas em algum lugar mais abaixo no nível dos padrões da década de 80
mas ainda é muito estranho...
Não vi isto em nenhuma outra linguagem de aplicação
seria razoável ter algumas soluções a nível de MQL
O que há de tão difícil nisso?
Se você precisar de precisão de até 4 dígitos. Multiplique o número por 10000, descarte a parte fracionária e divida por 10000.
As funções matemáticas do mql podem ser encontradas na documentação.
texto = "Posições fechadas em " + (string)corrente + " para carteira: " + nome_da_carteira;
DoubleTo String para corrente e você ficará bem
Sim, eu já percebi que precisamos forçar o arredondamento
NormalizeDuplo aparentemente não consegue fazer o trabalho
Sim, eu já percebi que precisamos forçar o arredondamento
NormalizeDuplo não parece fazer o trabalho
NormalizeDouble é exatamente como funciona (e sempre funcionou dessa forma, a partir do primeiro MQL)
Um número é multiplicado por 10 para o poder dos dígitos, convertido em forma inteira (descartando a parte fracionada), e depois dividido por 10 para o poder dos dígitos
Qual é o problema? Quebrando o padrão?
NormalizeDouble funciona exatamente assim (e sempre funcionou assim desde o primeiro MQL)
O número é multiplicado por 10 para o poder dos dígitos, convertido em forma inteira (descartando a parte fracionária), e depois dividido por 10 para o poder dos dígitos
Qual é o problema? Quebrando o padrão?
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Boa tarde!
Por mais que eu leia esta seção de Ajuda, ainda não consigo descobrir de onde vem aquela fracionária 1 no final.