Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 106
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
Aconselhe por favor sobre uma solução para o problema do arredondamento!
Preciso me livrar do ponto decimal sem um resto - arredondamento e exponenciação não resolvem o problema todo - o que devo fazer?
Por exemplo, era 1.44430 e eu preciso de 144430.
Parte do código - como é
NormalizeDouble(Low[1],Digits)*MathPow(10,(Digits+1)*1-1)
Basta dividir por _Ponto.
Impressão de resultado errado, o original é 161188 (1,61188) seu método de impressão 161187 dá 1,6119 (por que o arredondamento é feito quando se imprime Low[1] se cinco casas decimais?), minha versão é 161188.
Mas se complicarmos o problema.
long Calc=
NormalizeDouble(Close[1],Digits)*MathPow(10,(Digits+1)*3-1)+
NormalizeDouble(High[1],Digits)*MathPow(10,(Digits+1)*2-1)+
NormalizeDouble(Low[1],Digits)*MathPow(10,(Digits+1)*1-1);
Ou seja, a última parte do número 161184 - ou seja, a divergência de 4 unidades.
Sua variante desta expressão produz o mesmo valor
NormalizeDouble(Close[1],Digits)*MathPow(10,(Digits+1)*3-1)+
NormalizeDouble(High[1],Digits)*MathPow(10,(Digits+1)*2-1)+
Low[1]/Point;
Alguma idéia do que é o erro e como corrigi-lo?
Resultado de impressão errado, o original é 161188 (1,61188) Seu método de impressão 161187 dá 1,6119 (por que o arredondamento é feito quando se imprime Low[1] se cinco casas decimais?), minha versão é 161188.
Mas se complicarmos o problema.
long Calc=
NormalizeDouble(Close[1],Digits)*MathPow(10,(Digits+1)*3-1)+
NormalizeDouble(High[1],Digits)*MathPow(10,(Digits+1)*2-1)+
NormalizeDouble(Low[1],Digits)*MathPow(10,(Digits+1)*1-1);
Ou seja, a última parte do número 161184 - ou seja, a divergência de 4 unidades.
Sua variante nesta expressão dá o mesmo valor
NormalizeDouble(Close[1],Digits)*MathPow(10,(Digits+1)*3-1)+
NormalizeDouble(High[1],Digits)*MathPow(10,(Digits+1)*2-1)+
Low[1]/Point;
Alguma idéia do que é o erro e como corrigi-lo?
void OnStart()
{
string i = DoubleToString(SymbolInfoDouble(_Symbol, SYMBOL_BID)/_Point, 0);
Print(i);
Print(SymbolInfoDouble(_Symbol, SYMBOL_BID)/_Point);
}/*******************************************************************/
Execute-o assim.
void OnStart()
{
string i = DoubleToString(SymbolInfoDouble(_Symbol, SYMBOL_BID)/_Point, 0);
Print(i);
Print(SymbolInfoDouble(_Symbol, SYMBOL_BID)/_Point);
}/*******************************************************************/
Sim, a variável string recebe o número correto (preliminarmente), mas os zeros 161188.00000000 são adicionados, como posso me livrar deles?
Sim, a variável string recebe o número correto (preliminarmente), mas os zeros 161188.00000000 são adicionados, como posso me livrar deles?
Não há zeros em meu código. Veja como está escrito.
Obrigado - Perdi um zero.
Esta é a construção.
DoubleToString(Close[1]/_Point,0)+
DoubleToString(High[1]/_Point,0)+
DoubleToString(Low[1]/_Point,0);
Print("CalcX=",CalcX);
Agora eu preciso decompor esses números de volta em seus componentes.
Quando tento converter a corda para um número, recebo novamente o número errado 161184 ao invés de 161188
Print("testX=",testX);
Eu provavelmente deveria cortar o fio, mas como posso fazer isso de forma otimizada?
Sim, a variável string recebe o número correto (preliminarmente), mas os zeros 161188.00000000 são adicionados, como posso me livrar deles?
Então... me mostre o padrão. Como você sabe o que está lá dentro?
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
Obrigado - eu perdi o zero.
Foi esta construção que surgiu
DoubleToString(Close[1]/_Point,0)+
DoubleToString(High[1]/_Point,0)+
DoubleToString(Low[1]/_Point,0);
Print("CalcX=",CalcX);
Agora eu preciso decompor esses números de volta em seus componentes.
Quando tento converter a corda para um número, recebo novamente o número 161184 errado em vez do 161188
Print("testX=",testX);
Eu provavelmente deveria cortar o fio, mas como posso fazer isso de forma otimizada?
Bem, se você tem um desejo avassalador de fazer uma bagunça, converta a string de volta para um número StringToDouble() e multiplique por _Ponto com normalização para o número desejado de dígitos, provavelmente _Dígitos