¿Es posible obtener un valor "exacto"? - página 2

 

pero este valor

0.099999999

devolverá 0,1

)

 

entonces lo citado anteriormente sería más apropiado para la tarea del TC:

void OnStart()
  {
//---
   int DIGITS=2;
   string stroka=DoubleToString(0.099999999,8);
   int P=StringFind(stroka,".");
   Print(stroka);
   stroka=StringSubstr(stroka,0,P+DIGITS+1);
   Print(StringToDouble(stroka));
   Print(NL(DIGITS,0.099999999));
   
  }
//+------------------------------------------------------------------+
double NL (int DIGITS,double value) {
   double step=1/MathPow(10,DIGITS);
   return (MathFloor(value/step)*step);
}

Devuelve:

2014.10.04 11:42:31.856 normalize EURUSD,H4: 0.09
2014.10.04 11:42:31.856 normalize EURUSD,H4: 0.1
2014.10.04 11:42:31.856 normalize EURUSD,H4: 0.10000000
 

He esbozado una función que hace exactamente lo que quiero que haga: truncar con precisión una cadena a la precisión especificada , a diferencia de DoubleToStr:

string Normalize (string Normalize_Parse, int Normalize_Number, string Normalize_Separator = ".")
{
   string Normalize_Before,
          Normalize_After;
   
   for (int i = 0; i <= StringLen (Normalize_Parse) - 1; i ++)
   {
      if (StringSubstr (Normalize_Parse, i, StringLen (Normalize_Separator)) == Normalize_Separator)
      {
         for (int ii = i + StringLen (Normalize_Separator); ii < i + StringLen (Normalize_Separator) + Normalize_Number; ii ++)
         {
            Normalize_After += StringSubstr (Normalize_Parse, ii, 1);
         }
         
         break;
      }
      
      Normalize_Before += StringSubstr (Normalize_Parse, i, 1);
   }
   
   return (Normalize_Before + (Normalize_After > 0 ? Normalize_Separator + Normalize_After : ""));
}

Resultado para "0,09864724":

Comment (Normalize (0.09864724, 2)); // 0.09

Resultado para"0,-843158":

Comment (Normalize ("0,-843158", 3, ",-")); // 0,-843

Operaciones con dobles y similares:

Comment ((double) Normalize (0.09, 2) * 5); // 0.45

He estado buscando y dicha función ya existe en MQL4 (¿5?). Si no está ahí, ¿por qué no añadirlo hace tiempo? :)

 
WePlexus:

He esbozado una función que hace exactamente lo que quiero que haga: truncar con precisión una cadena a la precisión especificada , a diferencia de DoubleToStr:

Resultado para "0,09864724":

Resultado para"0,-843158":

Operaciones con dobles y similares:

He estado buscando y dicha función ya existe en MQL4 (¿5?). Si no está ahí, ¿por qué no añadirlo hace tiempo? :)

eso es lo que yo llamo "más fácil" )
 
WePlexus:

He esbozado una función que hace exactamente lo que quiero que haga: truncar con precisión una cadena a la precisión especificada , a diferencia de DoubleToStr:

Resultado para "0,09864724":

Resultado para"0,-843158":

Operaciones con dobles y similares:

He estado buscando y dicha función ya existe en MQL4 (¿5?). Si no está ahí, ¿por qué no añadirlo hace tiempo? :)

Estás operando con algunos ejemplos extraños - por eso es imposible concluir que tu función funciona correctamente.

tomemos este ejemplo:

como dejar =0.019999999999999999 -- dejar =0.01
 
abolk:
Estás operando con ejemplos fuera de lugar, por lo que no puedes concluir que tu función funciona correctamente.

tomemos este ejemplo:

como dejar =0.019999999999999999 -- dejar =0.01
comprobado la última función, deja 0,01.
 

Sigo sin entender lo que quieres.

Si quieres ver 0,098 en el gráfico en lugar de 0,098, hazlo.

int a=0,098 * 100;

doble d=a/100,0;

Comentario(StringFormat("%G", d );

 
sanyooooook:
comprobado la última función, deja 0,01
Comprobado su función -- deja 0.02
 
abolk:
Comprobada su función... deja 0,02.

Efectivamente, 0,02.

Mi función puede ser más engorrosa, pero corta exactamente 0,01.

 
sanyooooook:
comprobado la última función, deja 0,01
¿Cómo se puede optimizar su función para tomar 0,01 del ejemplode abolk?