Ottenere il numero di posizioni decimali di qualsiasi numero (non solo le virgolette) bypassando Digits() in MQL4 e MQL5
Penso di non essere l'unico che ha avuto una rara situazione in cui avevo bisogno di ottenere il numero di cifre decimali, e la funzione Digits() funziona solo con le virgolette, e inoltre non ci sono informazioni al riguardo da nessuna parte (almeno al momento di scrivere questo post l'ho trovato prima, quindi voglio mostrare quale soluzione ho trovato).
Come si è scoperto l'essenza è banalmente semplice, ma ha ancora un inconveniente - questa funzione non riconosce gli zeri, se dopo di loro non ci sono altre cifre. Per esempio, questa funzione restituirà 2 quando è seguita da 0,01, ma quando è seguita da 0,0000 restituirà 0 (il che significa che non può vedere quattro zeri). Pertanto, dovreste considerare questa lacuna nei vostri sviluppi.
Il codice in MQL5 ha dovuto essere leggermente migliorato, poiché apparentemente in MQL5 le variabili di tipo doppio sono automaticamente assegnate , 0 alla fine, non importa se la variabile è assegnata ad un intero o meno. Per questo motivo, la funzione non ha mai restituito 0.
Supponiamo di dare il numero 2,4875 e la funzione restituisce 4.
Cosa dovremmo farne? Qualcosa che non capisco il senso di(
Penso di non essere l'unico che ha avuto una rara situazione in cui avevo bisogno di ottenere il numero di cifre decimali, e la funzione Digits() funziona solo con le virgolette, e inoltre non ci sono informazioni al riguardo da nessuna parte (almeno al momento di scrivere questo post l'ho trovato prima, quindi voglio mostrare quale soluzione ho trovato).
Come si è scoperto l'essenza è banalmente semplice, ma ha ancora un inconveniente - questa funzione non riconosce gli zeri, se dopo di loro non ci sono altre cifre. Per esempio, questa funzione restituirà 2 se seguita da 0,01, ma se seguita da 0,0000 restituirà 0 (il che significa che non può vedere quattro zeri). Quindi, considerate questa lacuna nei vostri sviluppi.
Codice in MQL4
Il codice di MQL5
Il codice MQL5 ha dovuto essere leggermente migliorato, perché apparentemente in MQL5 alle variabili di tipo doppio viene automaticamente assegnato 0 alla fine, non importa se la variabile è un intero o no. Per questo motivo, la funzione non ha mai restituito 0.
string string_value = (string)value;
non leggere oltre :-)
Supponiamo di dare il numero 2,4875, la funzione restituirà 4.
Cosa ne facciamo? Non mi sembra di aver capito il senso di tutto questo.
A seconda di chi ha bisogno di cosa. Per esempio avevo bisogno di numeri interi per calcolare più facilmente l'indice di correlazione
non hai bisogno di leggere oltre :-)
Cosa non è chiaro per un programmatore qui?)
Semmai, c'è una funzione StringFind(), non c'è bisogno di fare un loop tra i caratteri per trovarlo.
grazie
int GetDigits( double Price ) { int Res = 0; while ((bool)(Price = ::NormalizeDouble(Price - (int)Price, 8)) && (Res < 8)) { Price *= 10; Res++; } return(Res); }
anche una buona soluzione
anche una buona soluzione
Una buona soluzione di solito funziona bene
void OnStart() { double price = 500000000.0001; Print( price, ":", GetDigits( price )); }
Risultato: 500000000.0001:8
Quante cifre dopo il punto decimale? Sono davvero 8?
Una buona soluzione di solito funziona bene
Risultato: 500000000.0001:8
Quante cifre dopo il punto decimale? Sono davvero otto?
Sì, otto.
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso
Penso di non essere l'unico che ha avuto una rara situazione in cui avevo bisogno di ottenere il numero di cifre decimali, e la funzione Digits() funziona solo con le virgolette, e inoltre non ci sono informazioni al riguardo da nessuna parte (almeno al momento di scrivere questo post non le ho trovate prima, quindi voglio mostrare quale soluzione ho trovato).
Come si è scoperto, l'essenza del semplice banale, ma ha ancora un inconveniente - questa funzione non riconosce gli zeri, se dopo di loro non ci sono altre cifre. Per esempio, la funzione restituirà 2 se seguita da 0,01, ma se seguita da 0,0000 restituirà 0 (cioè non può vedere quattro zeri). Quindi, considerate questa lacuna nei vostri sviluppi.
Codice in MQL4
Il codice di MQL5
Il codice MQL5 ha dovuto essere leggermente migliorato, perché apparentemente in MQL5 alle variabili di tipo doppio viene automaticamente assegnato 0 alla fine, non importa se la variabile è un intero o no. Per questo motivo, la funzione non ha mai restituito 0