Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 154
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Cioè dovete convertire 1,33182 in 1,3318? Si dovrebbe semplicemente tagliare la quinta cifra dopo la virgola o arrotondare fino alla quarta cifra, ad esempio, si avrebbe 1,3318 o 1,3319 da 1,33186?
La mia domanda è se c'è un bug o no. Quando si converte da double a int nel mio esempio, il risultato è uno in meno. Per favore, controllate voi stessi.
Alert dovrebbe dare 13318, ma dà 13317. Se non è arrotondato a int, darà correttamente 13318.0.Ditemi se c'è una differenza nelle espressioni:
и
Ditemi se c'è una differenza nelle espressioni:
и
Se avete il sospetto che qualcosa non vada bene, fate in modo che sia così:
La mia domanda è se c'è un bug o no. Quando si converte da double a int nel mio esempio, il risultato è uno in meno. Per favore, controllate con voi stessi.
Alert dovrebbe dare 13318, ma dà 13317. Così, se non si riduce a int, allora dà correttamente 13318.0causa lo scarto della parte frazionaria invece dell'arrotondamento (cioè simile a MathFloor() piuttosto che MathRound()), e nel vostro caso, il numero normalizzato potrebbe benissimo essere uguale a 13318 esattamente, ma dire 13317,9999999999999999997
che, quando viene emesso in forma frazionaria con un numero limitato di cifre, causa l'arrotondamento al risultato corretto (previsto), e quando la parte frazionaria di.... viene scartata vedi tu stesso.
Spero di essermi spiegato chiaramente.
c'è un analogo del parziale di Sharp? o come farlo?
Non c'è un analogo. potete incorporare un pezzo di definizione usando #include <partial_class_code.mqh>.
Alcune persone imitano anche l'eredità multipla in questo modo. // Io non lo faccio, mi sono abituato a farne a meno. :)
Se sospettate che ci sia qualcosa che non va, fate in modo che sia così:
L'ho già fatto. Sono solo curioso.
Capisco. Ritornando alla sua domanda precedente, l'essenza del disco può essere disegnata a questo confronto:
Non c'è differenza tra queste voci. Allo stesso tempo, vi raccomando di mettere tra parentesi i calcoli matematici all'interno degli if-os:
if (A<=(B1+B2*B3) && C<=(D1-D2*D3))
L'avviso non produce un errore. Il punto è che la normalizzazione porta un numero a una forma binaria, che è più vicina all'analogo decimale richiesto, mentre può non coincidere con esso in una direzione maggiore o minore (nel tuo caso). Poiché ciò che è espresso da una frazione decimale finita, non sempre può essere espresso da una frazione binaria finita . Espressione
risulta nello scartare la parte frazionaria piuttosto che arrotondare (cioè assomiglia più a MathFloor() che a MathRound()), e nel tuo caso il numero normalizzato potrebbe essere 13317.99999999999999997 piuttosto che 13318 esattamente.
che, quando viene emesso in forma frazionaria con un numero limitato di cifre, causa l'arrotondamento al risultato corretto (previsto), e quando la parte frazionaria di.... viene scartata vedi tu stesso.
Spero di essermi spiegato chiaramente.
Grazie, capisco.
Un'altra domanda, come posso combattere questo se non posso fare a meno di convertire in int?
Grazie, capisco.
Un'altra domanda, come si fa ad affrontare questo se non si può fare a meno di trasferire a int?
e aggiungi un paio di epsilon.
DBL_EPSILON
Il numero più piccolo per il quale è soddisfatta la condizione 1.0+DBL_EPSILON != 1.0