Obtenir le nombre de décimales de n'importe quel nombre (pas seulement les guillemets) en contournant Digits() dans MQL4 et MQL5 - page 5

 
A100:

Vous avez besoin d'un

de sorte que

le résultat était : 4

Exactement quatre ? C'est parti.

 
fxsaber:

C'est peut-être exactement la fonction dont vous avez besoin. A répondu au CT

Il a précisément besoin d'une telle fonction, car (comme vous l'avez correctement noté) tous les nombres ne peuvent pas être représentés exactement comme des doubles, ce qui signifie que résoudre le problème sans spécifier la précision n'a pas de sens (car dans le cas général, cela conduit à des résultats absurdes).

 
A100:

C'est exactement ce dont il a besoin, car (comme vous l'avez noté à juste titre) tous les nombres ne peuvent pas être représentés avec précision sous la forme d'un double, ce qui signifie que résoudre le problème sans spécifier la précision n'a pas de sens (car en général, cela conduit à des résultats absurdes).

Quelles sont les options permettant de spécifier la précision sans modifier le nombre de décimales, ou comment puis-je éliminer l'inconvénient décrit dans ma version ? Pour ma part, je n'ai trouvé qu'une (string)valeur

 
Alexandr Sokolov:

Quelles sont les options permettant de spécifier la précision sans modifier le nombre de décimales, ou comment puis-je éliminer l'inconvénient décrit dans ma version ? Pour ma part, je n'ai trouvé qu'une (string)valeur

Je suppose que vous voulez dire dans quelles limites chercher le dernier non-zéro.

 

essayé de faire un calcul du nombre de chiffres après la virgule à travers MathMod() avec un diviseur consécutif 0,1 , puis 0,01 ... 0,000(15 zéros) 1, il n'a pas fonctionné, la précision du nombre continue "flottant" besoin de normaliser à chaque fois, et si vous utilisez la normalisation, alors il est plus facile de comparer le nombre désiré et normalisé à quel signe - si différent, alors trouvé le dernier signe

HH : il y a une autre option, je n'ai pas eu le temps de vérifier - multiplier un nombre réel sans partie entière de 10 ^ 16 et sauvegarder le tout en long, puis diviser par 10 et vérifier le reste de la division, si = 0, alors diviser à nouveau.

 
Igor Makanu:

ZS : il y a une autre option, je n'ai pas eu le temps de vérifier - multiplier un nombre réel sans partie entière par 10^16 et sauvegarder le tout dans un long, puis diviser par 10 et vérifier le reste de la division, si = 0, alors diviser à nouveau.

Ça ne marchera pas.

 
Utiliser ledoublePoint()
Logarithme décimal, rejet du signe...
 
Aliaksandr Hryshyn:
Utiliser ledoublePoint()
Logarithme décimal, signe écarté...

Également testé, pas moyen.

C'est tout.

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

Il donne ce résultat

2018.11.05 10:43:05.138 !00 (GBPJPY,H1) 0.07000000000000001
Devinez trois fois ce qu'est le logarithme...
 
Alexey Viktorov:
Également testé, il ne fonctionne pas.
Pourquoi pas ? Arrondissez à l'entier.
 
Regardez ce que la fonction Point() renvoie.