Ottenere il numero di posizioni decimali di qualsiasi numero (non solo le virgolette) bypassando Digits() in MQL4 e MQL5 - pagina 5

 
A100:

Hai bisogno di uno

in modo che

il risultato è stato: 4

Esattamente quattro? Facciamolo.

 
fxsaber:

Forse questa è esattamente la funzione di cui avete bisogno. Ha risposto al TC

Ha bisogno proprio di una funzione del genere, perché (come hai notato correttamente) non tutti i numeri possono essere rappresentati esattamente come doppi, il che significa che risolvere il problema senza specificare la precisione non ha senso (perché nel caso generale porta a risultati assurdi).

 
A100:

Ha bisogno esattamente di questo, perché (come hai giustamente notato) non tutti i numeri possono essere rappresentati accuratamente come un doppio, il che significa che risolvere il problema senza specificare la precisione non ha senso (perché in generale porta a risultati assurdi).

Quali sono le opzioni per specificare la precisione senza cambiare il numero di cifre decimali, o come posso eliminare lo svantaggio che ho descritto nella mia versione? Per me ho trovato solo il valore (stringa)

 
Alexandr Sokolov:

Quali sono le opzioni per specificare la precisione senza cambiare il numero di cifre decimali, o come posso eliminare lo svantaggio che ho descritto nella mia versione? Per me ho trovato solo il valore (stringa)

Immagino che tu voglia dire entro quali limiti cercare l'ultimo non-zero.

 

provato a fare un calcolo del numero di cifre dopo il punto decimale attraverso MathMod() con un divisore consecutivo 0.1 , poi 0.01 ... 0.000(15 zeri) 1, non ha funzionato, la precisione del numero continua a "galleggiare" bisogno di normalizzare ogni volta, e se si utilizza la normalizzazione, allora è più facile confrontare il numero desiderato e normalizzato a quale segno - se diverso, poi trovato l'ultimo segno

HH: c'è un'altra opzione, non ha avuto il tempo di controllare - moltiplicare un numero reale senza una parte intera di 10 ^ 16 e salvare il tutto in lungo, e poi dividere per 10 e controllare il resto della divisione, se = 0, poi ancora dividere

 
Igor Makanu:

ZS: c'è un'altra opzione, non ho avuto tempo di controllare - moltiplicare un numero reale senza una parte intera per 10^16 e salvare il tutto in lungo, e poi dividere per 10 e controllare il resto della divisione, se = 0, allora dividere di nuovo

Non funzionerà.

 
Usa ildoppioPoint()
Logaritmo decimale, scarto di segno...
 
Aliaksandr Hryshyn:
Usa ildoppioPoint()
Logaritmo decimale, segno scartato...

Anche testato, niente da fare.

Questo è tutto.

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

Dà questo risultato

2018.11.05 10:43:05.138 !00 (GBPJPY,H1) 0.07000000000000001
Indovina tre volte il logaritmo...
 
Alexey Viktorov:
Anche testato, non funziona.
Perché no? Arrotondare ulteriormente all'intero.
 
Guardate cosa restituisce la funzione Point().
Motivazione: