Obtener el número de decimales de cualquier número (no sólo las comillas) evitando Digits() en MQL4 y MQL5 - página 5

 
A100:

Necesitas uno

para que

el resultado fue: 4

¿Exactamente cuatro? Hagámoslo.

 
fxsaber:

Tal vez esa sea exactamente la función que necesita. Contestación al TC

Precisamente necesita una función de este tipo, porque (como has señalado correctamente) no todos los números pueden representarse exactamente como dobles, lo que significa que resolver el problema sin especificar la precisión no tiene sentido (porque en el caso general conduce a resultados absurdos).

 
A100:

Necesita exactamente eso, porque (como has señalado correctamente) no todos los números pueden representarse con precisión como un doble, lo que significa que resolver el problema sin especificar la precisión no tiene sentido (porque en general conduce a resultados absurdos).

¿Cuáles son las opciones para especificar la precisión sin cambiar el número de decimales, o cómo puedo eliminar la desventaja que describí en mi versión? En mi caso, sólo he encontrado el valor (de la cadena)

 
Alexandr Sokolov:

¿Cuáles son las opciones para especificar la precisión sin cambiar el número de decimales, o cómo puedo eliminar la desventaja que describí en mi versión? En mi caso, sólo he encontrado el valor (de la cadena)

Supongo que te refieres a dentro de qué límites buscar el último no cero.

 

Traté de hacer un cálculo del número de decimales a través de MathMod() con un divisor consecutivo 0,1, a continuación, 0,01 ... 0,000(15 ceros) 1, no funcionó, la exactitud del número mantiene "flotante" necesidad de normalizar cada vez, y si se utiliza la normalización, entonces es más fácil de comparar el número que desea y normalizado a lo que signo - si es diferente, entonces encontró el último signo

HH: hay otra opción, no tenía tiempo para comprobar - multiplicar un número real sin una parte entera de 10 ^ 16 y guardar todo en largo, y luego dividir por 10 y comprobar el resto de la división, si = 0, entonces de nuevo dividir

 
Igor Makanu:

ZS: hay otra opción, no he tenido tiempo de comprobarlo - multiplicar un número real sin parte entera por 10^16 y guardarlo todo en long, y luego dividir por 10 y comprobar el resto de la división, si = 0, entonces dividir de nuevo

No funcionará.

 
Utilizarel doblePunto()
Logaritmo decimal, signo descartado...
 
Aliaksandr Hryshyn:
Utilizarel doblePunto()
Logaritmo decimal, signo descartado...

También probado, no hay manera.

Eso es todo.

void OnStart()
{
 double p = 0.07;
 Print(p);
}/*******************************************************************/

da este resultado

2018.11.05 10:43:05.138 !00 (GBPJPY,H1) 0.07000000000000001
Adivina tres veces lo que es el logaritmo...
 
Alexey Viktorov:
También probado, no funciona.
¿Por qué no? Redondea hasta el total.
 
Mira lo que devuelve la función Point().