Obter o número de casas decimais de quaisquer números (não apenas citações) contornando Dígitos() em MQL4 e MQL5
Acho que não sou o único que tinha uma situação rara onde eu precisava obter o número de casas decimais, e a função Dígitos() funciona apenas com citações, e além disso não há informações sobre isso em nenhum lugar (pelo menos na hora de escrever este post eu o encontrei antes, então eu quero mostrar que solução encontrei).
A essência é banalmente simples, mas ainda tem uma desvantagem - esta função não reconhece zeros, se depois deles não houver outros dígitos. Por exemplo, a função retornará 2 quando seguida por 0,01, mas quando seguida por 0,0000 retornará 0 (o que significa que não pode ver quatro zeros). Portanto, você deve considerar esta lacuna em seus desenvolvimentos.
O código na MQL5 teve que ser ligeiramente melhorado, pois aparentemente na MQL5 variáveis de tipo duplo são automaticamente atribuídas , 0 no final, não importando se a variável é atribuída a um número inteiro ou não. Por este motivo, a função nunca retornou 0.
Suponha que damos o número 2.4875 e a função retorna 4.
O que devemos fazer com ele? Algo que eu não entendo o objetivo de(
Acho que não sou o único que tinha uma situação rara onde eu precisava obter o número de casas decimais, e a função Dígitos() funciona apenas com citações, e além disso não há informações sobre isso em nenhum lugar (pelo menos na hora de escrever este post eu o encontrei antes, então eu quero mostrar que solução encontrei).
A essência é banalmente simples, mas ainda tem uma desvantagem - esta função não reconhece zeros, se depois deles não houver outros dígitos. Por exemplo, esta função retornará 2 quando seguida por 0,01, mas quando seguida por 0,0000 retornará 0 (o que significa que não pode ver quatro zeros). Portanto, considere esta lacuna em seus desenvolvimentos.
Código em MQL4
O código na MQL5
O código MQL5 teve que ser ligeiramente melhorado, já que aparentemente em MQL5 variáveis de tipo duplo são automaticamente atribuídas 0 no final, não importa se a variável é um número inteiro ou não. Por este motivo, a função nunca retornou 0.
string string_value = (string)value;
não leia mais :-)
Suponhamos que damos o número 2.4875, a função retornará 4.
O que fazemos com ele? Parece que não estou entendendo o ponto(
Dependendo de quem precisa do quê. Por exemplo, eu precisava de inteiros para calcular mais facilmente o índice de correlação
você não precisa ler mais :-)
O que não está claro para um programador aqui?)
Se existe alguma função StringFind(), não há necessidade de fazer um loop através dos caracteres para encontrá-la.
obrigado
int GetDigits( double Price ) { int Res = 0; while ((bool)(Price = ::NormalizeDouble(Price - (int)Price, 8)) && (Res < 8)) { Price *= 10; Res++; } return(Res); }
também uma boa solução
também uma boa solução
Uma boa solução geralmente funciona corretamente
void OnStart() { double price = 500000000.0001; Print( price, ":", GetDigits( price )); }
Resultado: 500000000.0001:8
Quantos dígitos após o ponto decimal? É realmente 8 ?
Uma boa solução geralmente funciona corretamente
Resultado: 500000000.0001:8
Quantos dígitos após o ponto decimal? São realmente oito?
Sim, oito.
- 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
Acho que não sou o único que teve uma situação rara em que precisei obter o número de casas decimais, e a função Dígitos() funciona apenas com citações, e além disso não há informações sobre isso em nenhum lugar (pelo menos na hora de escrever este post eu não o encontrei antes, então quero mostrar que solução encontrei).
Como se viu, a essência do banal é simples, mas ainda tem uma desvantagem - esta função não reconhece zeros, se depois deles não houver outros dígitos. Por exemplo, a função retornará 2 quando seguida de 0,01, mas quando seguida de 0,0000 retornará 0 (ou seja, não pode ver quatro zeros). Portanto, considere esta lacuna em seus desenvolvimentos.
Código em MQL4
O código na MQL5
O código MQL5 teve que ser ligeiramente melhorado, já que aparentemente em MQL5 variáveis de tipo duplo são automaticamente atribuídas 0 no final, não importa se a variável é um número inteiro ou não. Por este motivo, a função nunca retornou 0