Arredondamento de números em MT4 via NormalizeDouble - página 8

 
Dmitry Fedoseev:

Bem e errado.

Subtrair, normalizar para dois dígitos e depois para um.

Então tente :)

 
Event:

Então tente :)

O que há para tentar? É bastante claro. O resultado da subtração não é normalizado, portanto, haverá surpresas às vezes se você não normalizar a dois dígitos.
 
Event:

Qual delas você precisa?

você precisa sabero comprimento do fio? - Você tem certeza de que tem os galhos certos?

Código?

Se são mais de 2 linhas como a minha, então seu código é mais complicado.

 
Vasyl Nosal:

Código?

Se são mais de 2 linhas como a minha, então seu código é mais complicado.

Você não está lendo seus cargos com atenção.

Eu lhe dei o código - ele tem uma linha.

 
Event:

Você não está lendo os postos com atenção.

Eu lhe dei o código - ele tem uma linha.

Isso é legal. Vou escrever 1.15 normalizar em meu código assim:)))))))))))))))))))))))))))))))))))))))))))))))))))
 
Vasyl Nosal:

+++

Entretanto, se um número for maior que 15 casas decimais, ele ainda deve ser truncado de alguma forma, caso contrário não funcionará corretamente.

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   ushort  Characters_delete=15;
   for(int i=0;i<=Characters_delete;i++)
     {
      double v1=1.123456789012345;

      v1=DoubleCrop(v1,i,Characters_delete);

      Print("v1 = ",i," = ",DoubleToString(v1,Characters_delete-i));
     }
   Print("---");
  }
//+------------------------------------------------------------------+
//| Double Crop function                                             |
//+------------------------------------------------------------------+
double DoubleCrop(double value,int ii,ushort  Characters)
  {
   string data="",resoult="";
   data=DoubleToString(value,Characters);
   resoult=StringSubstr(data,0,StringLen(data)-ii);
   return StringToDouble(resoult);
  }
//+------------------------------------------------------------------+
 
Event:

Então tente :)

Com zero e com números negativos errados. Com as positivas, surpreendentemente, sem nenhuma surpresa, corretas.
 

Vasyl Nosal:

extern ushort Characters_delete = 1;

///////////////////////////////////////////
string data=DoubleToString(Bid,Digits);
string resoult=StringSubstr(data,0,StringLen(data)-Characters_delete);  

Heh. Esse é o caminho errado. Resultados totalmente errados.
 
Dmitry Fedoseev:
É errado com zero e com números negativos. Com as positivas, surpreendentemente, sem surpresas, é correto.

Os negativos devem ser adicionados (se Normalizar aumenta o modulo ao arredondar).

E provavelmente não fazer nada com zero.

Se aplicada a uma cotação - sua probabilidade de se tornar <= 0 é pequena. :)

 
Oito páginas sobre arredondamento. Acho que isso costumava ser coberto na quarta série :(
Razão: