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

 
void OnStart()
{
        double price =  500000000.0001;
        Print( price, ":", d( price ));
}

Résultat : 500000000.0001:4

4, mais pas 8

 
Très bien alors... Baignez-vous dans cette joie, si vous l'aimez.
 
A100:

Vous l'avez deviné. Et combien de décimales y a-t-il ? 8 ?

Je n'ai pas besoin d'être testé.

  Print(NormalizeDouble(1234567890 + 1 e-7, 8) == 1234567890); // true
  Print(1234567890 + 1 e-7 == 1234567890); // true
 
fxsaber:

Je n'ai pas besoin d'être contrôlé.

Néanmoins, vous avez corrigé votre code - donc la vérification a été utile.

 
Imprimer ( 12345+1e-7)
 
A100:

Néanmoins, vous avez corrigé votre code

Regardez d'où le code a été tiré. Et dans quel but pratique il était destiné. Si ce n'est pas clair - pour les prix.

Le code n'était pas infaillible car il n'était pas destiné à être utilisé par un tel utilisateur.

Au cours de la discussion, il s'est avéré que le foolproofing doit être mis en œuvre si le code est publié. Sinon, ce sera 5 pages de merde.

Donc, en effet, corrigé. Une fois encore, les nombres à chiffres infinis sont la norme.

 
Dmitry Fedoseev:

Je sais comment NormalizeDouble fonctionne, parce que j'ai joué son analogue complet.

Tout dépend beaucoup des chiffres que vous voulez obtenir. Si la représentation est double, votre code donne une valeur différente. Si les chiffres d'une constante numérique, c'est correct (et pas toujours).

 
C'est reparti avec les droppers...
 
fxsaber:

Tout dépend beaucoup de ce que vous avez besoin d'obtenir.

Vous avez besoin d'un

int f( double );

de sorte que (en particulier)

void OnStart()
{
        Print( f( NormalizeDouble( 500000000.0001, 4 )));
}

le résultat est égal à : 4

 
A100:

Vous avez besoin d'un

à

Le résultat a été : 4

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

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

Comment obtenir les décimales de n'importe quel nombre (pas seulement les guillemets) en contournant Digits() dans MQL4 et MQL5

Alexandr Sokolov, 2018.11.03 17:39

Je pense que je ne suis pas le seul à avoir été confronté à une situation rare où j'avais besoin d'obtenir le nombre de décimales