Buon pomeriggio!
Per quanto abbia letto questa sezione della Guida, non riesco ancora a capire da dove viene quel frazionario 1 alla fine.
Tenete a mente che quando un numero normalizzato viene emesso sul Journal usando Print(), potrebbe contenere più cifre decimali di quanto vi aspettate. Per esempio,
doppio a=76.671;// numero normalizzato con 3 cifre decimali
Print("Print(76.671)=",a);// stampalo così com'è
Print("DoubleToString(a,8)=",DoubleToString(a,8));// stampalo con la precisione specificataviene emesso nel terminale:
DoubleToString(a,8)=76.67100000
Print(76.671)=76.67100000000001
Il tipo doppio ha dei limiti di precisione a causa dei quali possono verificarsi degli errori.
Vi consiglio questo articolo: https://www.mql5.com/ru/articles/1561
- 2009.11.02
- MetaQuotes Software Corp.
- www.mql5.com
Il tipo doppio ha dei limiti di precisione, che possono portare a degli errori.
Vi consiglio questo articolo: https://www.mql5.com/ru/articles/1561
Vedo la raccomandazione, grazie.
Potete usare DoubleToStr quando emettete
ma non è chiaro da dove venga quello, in primo luogo!
Se stessi facendo una divisione/moltiplicazione, OK, va bene, è un errore.
Ma in una costante che mi sono prescritto?
Risulta che devo usare l'arrotondamento per una costante che inizialmente non ha questa precisione
e soprattutto, la fiducia in ciò che è effettivamente memorizzato nella doppia variabile è minata!
Citazione dalla documentazione
Необходимо помнить, что вещественные числа хранятся в памяти компьютера с некоторой ограниченной точностью в двоичной системе счисления, в то время как общепринятой в использовании является десятичная система счисления. Поэтому многие числа, которые точно записываются в десятичной системе, в двоичной системе можно записать только в виде бесконечной дроби.
Per esempio, i numeri 0,3 e 0,7 sono rappresentati nel computer come frazioni infinite, mentre il numero 0,25 è memorizzato esattamente come una potenza di due.
interessante...
Sto già indovinando che non è in MQL ma da qualche parte più in profondità, a livello di standard 80s
ma ancora molto strano...
Non l'ho visto in nessun altro linguaggio applicativo
sarebbe ragionevole avere alcuni workaround a livello del linguaggio MQL stesso
e ancora non spiega perché il codice qui sotto dà 0000000001 code
current=NormalizeDouble(GlobalVariableGet("Equity-"+portfolio_id),2);
text = "Positions closed at " + (string)current + " for portfolio: " + portfolio_name;
if(!automatic) MessageBox(text,""); else Print(text);
perché ho fatto la normalizzazione
e il numero è ancora in coda.
interessante...
Immagino già che non si tratti di MQL, ma da qualche parte più in basso, al livello degli standard degli anni 80
ma è ancora molto strano...
Non ho visto questo in nessun altro linguaggio applicativo
sarebbe ragionevole avere alcuni workaround a livello di MQL
Cosa c'è di così difficile?
Se avete bisogno di precisione fino a 4 cifre. Moltiplicare il numero per 10000, scartare la parte frazionaria e dividere per 10000.
Le funzioni matematiche di mql possono essere trovate nella documentazione.
text = "Posizioni chiuse a " + (string)current + " per il portafoglio: " + portfolio_name;
DoubleTo String per la corrente e sarete a posto
Sì, ho già capito che dobbiamo forzare l'arrotondamento
NormalizeDouble apparentemente non riesce a fare il lavoro
Sì, ho già capito che dobbiamo forzare l'arrotondamento
NormalizeDouble non sembra fare il lavoro
NormalizeDouble è esattamente come funziona (e ha sempre funzionato così, a partire dal primo MQL)
Un numero viene moltiplicato per 10 alla potenza delle cifre, convertito in forma intera (scartando la parte frazionaria), e poi diviso per 10 alla potenza delle cifre
Qual è il problema? Rompere lo schema?
NormalizeDouble funziona esattamente così (e ha sempre funzionato così dal primo MQL)
Il numero viene moltiplicato per 10 alla potenza delle cifre, convertito in forma intera (scartando la parte frazionaria), e poi diviso per 10 alla potenza delle cifre
Qual è il problema? Rompere lo schema?
- 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
Buon pomeriggio!
Per quanto abbia letto questa sezione della Guida, non riesco ancora a capire da dove viene quel frazionario 1 alla fine.