[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 303

 
Mais uma pergunta. xrust indicador (https://www.mql5.com/ru/code/8318) agora preciso enviar o preço do máximo e mínimo para o Expert Advisor (com saída para o gráfico). eu fiz algumas soluções de problemas, mas não consigo obter os valores que preciso((: um é enviado, outro é igual a 0. como exibir os valores reais?
Arquivos anexados:
 
hoz:

Estou aprendendo a trabalhar com bibliotecas. Estou escrevendo um consultor especializado, há uma função como esta:

Coloquei isso na inclusão, tudo funciona como deveria. Mas se você conectá-la à biblioteca, há um erro ao compilar o Expert Advisor:

Por que esta função não é visível na biblioteca?

A biblioteca tem este conteúdo e se compila perfeitamente:

Muitos erros. Podemos olhar para um exemplo e fazê-lo por analogia?
 

Há uma citação, suponha Ask = 1.20667

A partir desta citação, você precisa retirar o 3º dígito após o ponto decimal. Ou seja, pegue o valor 1.206, o restante deve ser descartado.

Por favor, diga-me como fazê-lo corretamente, porque"Normalizar" arredonda para cima e o resultado é 1.20700.

Eu tentei uma alternativa:

DoubleToStr(Ask,3)

Sim, ele distribui tudo corretamente -> 1.206 . Mas quando se volta a dobrar, ele arredonda novamente, mas com 2 casas decimais.

StrToDouble(DoubleToStr(Ask,3)) = 1,2100    // 1,2100 - это получившийся результат (т.е. округляет)

Eu não preciso de arredondamento. Eu só preciso pegar o 2º, 3º ou 4º dígito (minha escolha) após o ponto decimal e descartar o resto.

Como faço isso corretamente?

 
Chiripaha:

Há uma citação, suponha Ask = 1.20667

A partir desta citação, você precisa retirar o 3º dígito após o ponto decimal. Ou seja, pegue o valor 1.206, o restante deve ser descartado.

Por favor, diga-me como fazê-lo corretamente, porque"Normalizar" arredonda para cima e o resultado é 1.20700.

Eu tentei uma alternativa:

Sim, ele distribui tudo corretamente -> 1.206 . Mas quando se volta a dobrar, ele arredonda novamente, mas com 2 casas decimais.

Eu não preciso de arredondamento. Eu só preciso pegar o 2º, 3º ou 4º dígito (minha escolha) após o ponto decimal e descartar o resto.

Como faço isso corretamente?

Você está no caminho certo: converta o dobro para string by Digits e depois corte o número necessário de dígitos do resultado(StringSubstr()).
 
Chiripaha:

Há uma citação, suponha Ask = 1.20667

A partir desta citação, você precisa retirar o 3º dígito após o ponto decimal. Ou seja, pegue o valor 1.206, o restante deve ser descartado.

Por favor, diga-me como fazê-lo corretamente, porque"Normalizar" arredonda para cima e o resultado é 1.20700.

Eu tentei uma alternativa:

Sim, ele distribui tudo corretamente -> 1.206 . Mas quando se volta a dobrar, ele arredonda novamente, mas com 2 casas decimais.

Eu não preciso de arredondamento. Eu só preciso pegar o 2º, 3º ou 4º dígito (minha escolha) após o ponto decimal e descartar o resto.

Como faço isso corretamente?

https://docs.mql4.com/ru/strings/StringSubstr
 

Peço desculpas - presumi que poderia ser mal entendido. Tentei esclarecer, mas o efeito ainda está lá. - É minha culpa, desculpe.

Não preciso apenas de um dígito (3º, 4º, etc. após o ponto decimal), mas o dígito inteiro até o 2º, 3º ou 4º ponto decimal, inclusive. MAS! sem arredondamento.

E o problema é que quando eu coloco o dígito de volta no tipo Double, ele volta a arredondar para cima.

E a coisa toda é, que mesmo que esse dígito de uma maneira estúpida e grande traduza uma letra de cada vez primeiro em tipo String, e depois a traduza para Double,

ele vai se reunir novamente. - Esta é a ironia da situação. Por que StrToDouble() arredonda um número? - Isto é o que eu não entendo. A tarefa da função é convertê-la de

de um formato para outro e não "moldar" ou acrescentar nada de si mesmo lá. Mas também "melhora" alguma coisa.

 
Chiripaha:

Peço desculpas - presumi que poderia ser mal entendido. Tentei esclarecer, mas o efeito ainda está lá. - É minha culpa, desculpe.

Não preciso apenas de um dígito (3º, 4º, etc. após o ponto decimal), mas o dígito inteiro até o 2º, 3º ou 4º ponto decimal, inclusive. MAS! sem arredondamento.

E o problema é que quando eu coloco o dígito de volta no tipo Double, ele volta a arredondar para cima.

E a coisa toda é, que mesmo que esse dígito de uma maneira estúpida e grande traduza uma letra de cada vez primeiro em tipo String, e depois a traduza para Double,

ele vai se reunir novamente. - Esta é a ironia da situação. Por que StrToDouble() arredonda um número? - Isto é o que eu não entendo. A tarefa da função é convertê-la de

de um formato para outro e não "moldar" ou acrescentar nada de si mesmo lá. Mas também "melhora" alguma coisa.

Você sabe a diferença entre um número e um número?
 
Chiripaha:

Peço desculpas - presumi que poderia ser mal entendido. Tentei esclarecer, mas o efeito ainda está lá. - É minha culpa, desculpe.

Não preciso apenas de um dígito (3º, 4º, etc. após o ponto decimal), mas o dígito inteiro até o 2º, 3º ou 4º ponto decimal, inclusive. MAS! sem arredondamento.

E o problema é que quando eu coloco o dígito de volta no tipo Double, ele volta a arredondar para cima.

E a coisa toda é, que mesmo que esse dígito de uma maneira estúpida e grande traduza uma letra de cada vez primeiro em tipo String, e depois a traduza para Double,

ele vai se reunir novamente. - Esta é a ironia da situação. Por que StrToDouble() arredonda um número? - Isto é o que eu não entendo. A tarefa da função é convertê-la de

de um formato para outro e não "moldar" ou acrescentar nada de si mesmo lá. Mas também "melhora" alguma coisa.

É preciso desenvolver a capacidade de "ouvir"! :))
 

: )))))))) Sim - isso mesmo. Todas as reprovações são aceitas! - Por isso, peço desculpas novamente. - São todas as conseqüências de um desenvolvimento forte (através de exercícios especiais)

criativo, imaginativo, poético, etc. - mesmo assim, há dois hemisférios em um ser humano: criativo e racional. Minha culpa é que eu o vi e não o corrigi.

Portanto, todas as suas reivindicações são verdadeiras e eu sou culpado.

Mas apenas a questão permanece sem solução...

Como resolvê-lo no final?

Se você acha que eu não ouvi nada, por favor, esclareça. Entendo a técnica de feedback (por poder "ouvir"), mas ainda não vi uma solução.

Como obter o número certo sem arredondamento em Duplo, até a 3ª casa decimal, por exemplo no valor de Ask = 1.20667 ?- Uma solução como "StrToDouble(DoubleToStr(Ask,3)) = 1,2100 // 1,2100 é o resultado (ou seja, arredondamento)" não funcionou.

Obrigado antecipadamente por sua tolerância e compreensão.

 
Zhunko:
Você sabe a diferença entre um número e um número?


: )) Sim, é claro que entendo a diferença. Mas em um posto apologético e esclarecedor eu fiz esse erro de qualquer forma (Como conseguir o número certo sem arredondamento...), tive que corrigir (e não percebi imediatamente). Não é um mal-entendido, é o outro lado do desenvolvimento da imagem. Infelizmente - este é seu custo. Quando eles dizem "mortos vivos" ou algo semelhante, também não faz sentido. Mas sem ela, é impossível perceber a essência das coisas figurativamente. Quero dizer que é normal. Não julgue. : ) Também não é tão bom levar as coisas à letra. - Vou tentar, inclusive com sua ajuda, corrigir minha comunicação. Juntos faremos a vida melhor e mais perfeita. Obrigado por seus comentários!