[ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5. - page 303

 
hoz:

J'apprends à travailler avec les bibliothèques. J'écris un conseiller expert, il y a une fonction comme celle-ci :

Je l'ai mis dans l'inclusion, tout fonctionne comme il se doit. Mais si vous le connectez à la bibliothèque, il y a une erreur lors de la compilation de l'Expert Advisor :

Pourquoi cette fonction n'est-elle pas visible dans la bibliothèque ?

La bibliothèque a ce contenu et compile parfaitement :

Beaucoup d'erreurs. Peut-on regarder un exemple et procéder par analogie ?
 

Il y a une cotation, supposez Ask = 1.20667

Dans ce devis, vous devez enlever le troisième chiffre après la virgule. C'est-à-dire qu'il faut prendre la valeur 1.206, le reste devant être écarté.

S'il vous plaît, dites-moi comment le faire correctement, car"Normalize" arrondit vers le haut et le résultat est 1.20700.

J'ai essayé une solution de contournement :

DoubleToStr(Ask,3)

Oui, il donne tout correctement -> 1.206 . Mais en revenant à Double, il arrondit à nouveau, mais à 2 décimales.

StrToDouble(DoubleToStr(Ask,3)) = 1,2100    // 1,2100 - это получившийся результат (т.е. округляет)

Je n'ai pas besoin d'arrondir. J'ai juste besoin de prendre le 2ème, 3ème ou 4ème chiffre (au choix) après la virgule et de rejeter le reste.

Comment le faire correctement ?

 
Chiripaha:

Il y a une cotation, supposez Ask = 1.20667

Dans ce devis, vous devez enlever le troisième chiffre après la virgule. C'est-à-dire qu'il faut prendre la valeur 1.206, le reste devant être écarté.

S'il vous plaît, dites-moi comment le faire correctement, car"Normalize" arrondit vers le haut et le résultat est 1.20700.

J'ai essayé une solution de contournement :

Oui, il donne tout correctement -> 1.206 . Mais en revenant à Double, il arrondit à nouveau, mais à 2 décimales.

Je n'ai pas besoin d'arrondir. J'ai juste besoin de prendre le 2ème, 3ème ou 4ème chiffre (au choix) après la virgule et de rejeter le reste.

Comment le faire correctement ?

Vous êtes sur la bonne voie : convertissez le double en chaîne de caractères par Digits, puis coupez le nombre de chiffres requis dans le résultat(StringSubstr()).
 
Chiripaha:

Il y a une cotation, supposez Ask = 1.20667

Dans ce devis, vous devez enlever le troisième chiffre après la virgule. C'est-à-dire qu'il faut prendre la valeur 1.206, le reste devant être écarté.

S'il vous plaît, dites-moi comment le faire correctement, car"Normalize" arrondit vers le haut et le résultat est 1.20700.

J'ai essayé une solution de contournement :

Oui, il donne tout correctement -> 1.206 . Mais en revenant à Double, il arrondit à nouveau, mais à 2 décimales.

Je n'ai pas besoin d'arrondir. J'ai juste besoin de prendre le 2ème, 3ème ou 4ème chiffre (au choix) après la virgule et de rejeter le reste.

Comment le faire correctement ?

https://docs.mql4.com/ru/strings/StringSubstr
 

Je m'excuse - j'ai supposé que je pouvais avoir mal compris. J'ai essayé de clarifier, mais l'effet est toujours là. - C'est ma faute, désolé.

Je n'ai pas besoin d'un seul chiffre (3e, 4e, etc. après la virgule), mais du chiffre entier jusqu'à la 2e, 3e ou 4e virgule incluse. MAIS ! sans arrondir.

Et le problème, c'est que lorsque je remets le chiffre dans le type Double, il s'arrondit à nouveau.

Et le tout est que, même si ce chiffre, d'une manière stupidement grande, traduit une lettre à la fois d'abord en type String, et ensuite la traduit en Double,

ça va encore s'arrondir. - C'est l'ironie de la situation. Pourquoi StrToDouble() arrondit-il un nombre ? - C'est ce que je ne comprends pas. La tâche de la fonction est de le convertir de

d'un format à l'autre et ne pas "mouler" ou ajouter quoi que ce soit de vous là. Mais elle "améliore" aussi quelque chose.

 
Chiripaha:

Je m'excuse - j'ai supposé que je pouvais avoir mal compris. J'ai essayé de clarifier, mais l'effet est toujours là. - C'est ma faute, désolé.

Je n'ai pas besoin d'un seul chiffre (3e, 4e, etc. après la virgule), mais du chiffre entier jusqu'à la 2e, 3e ou 4e virgule incluse. MAIS ! sans arrondir.

Et le problème, c'est que lorsque je remets le chiffre dans le type Double, il s'arrondit à nouveau.

Et le tout est que, même si ce chiffre, d'une manière stupidement grande, traduit une lettre à la fois d'abord en type String, et ensuite la traduit en Double,

ça va encore s'arrondir. - C'est l'ironie de la situation. Pourquoi StrToDouble() arrondit-il un nombre ? - C'est ce que je ne comprends pas. La tâche de la fonction est de le convertir de

d'un format à l'autre et ne pas "mouler" ou ajouter quoi que ce soit de vous là. Mais elle "améliore" aussi quelque chose.

Connaissez-vous la différence entre un nombre et un chiffre ?
 
Chiripaha:

Je m'excuse - j'ai supposé que je pouvais avoir mal compris. J'ai essayé de clarifier, mais l'effet est toujours là. - C'est ma faute, désolé.

Je n'ai pas besoin d'un seul chiffre (3e, 4e, etc. après la virgule), mais du chiffre entier jusqu'à la 2e, 3e ou 4e virgule incluse. MAIS ! sans arrondir.

Et le problème, c'est que lorsque je remets le chiffre dans le type Double, il s'arrondit à nouveau.

Et le tout est que, même si ce chiffre, d'une manière stupidement grande, traduit une lettre à la fois d'abord en type String, et ensuite la traduit en Double,

ça va encore s'arrondir. - C'est l'ironie de la situation. Pourquoi StrToDouble() arrondit-il un nombre ? - C'est ce que je ne comprends pas. La tâche de la fonction est de le convertir de

d'un format à l'autre et ne pas "mouler" ou ajouter quoi que ce soit de vous là. Mais elle "améliore" aussi quelque chose.

Il faut développer la capacité à "entendre" ! :))
 

: )))))))) Oui, c'est ça. Tous les reproches sont acceptés ! - Pour cela aussi, je m'excuse. - C'est toutes les conséquences d'un fort développement (par des exercices spéciaux)

côté créatif, imaginatif, poétique, etc. - tout de même, il y a deux hémisphères chez un être humain : le créatif et le rationnel. Ma faute est de l'avoir vu et de ne pas l'avoir corrigé.

Donc toutes vos affirmations sont justes et je suis coupable.

Mais seule la question reste en suspens...

Comment résoudre le problème à la fin ?

Si vous pensez que je n'ai pas entendu quelque chose, veuillez clarifier. Je comprends la technique du feedback (pour pouvoir "entendre"), mais je n'ai pas encore vu de solution.

Comment obtenir le bon nombre sans arrondir en Double, jusqu'à la 3ème décimale, par exemple dans la valeur de Ask = 1,20667 ?- Une solution comme "StrToDouble(DoubleToStr(Ask,3)) = 1,2100 // 1,2100 est le résultat (c'est-à-dire l'arrondi)" n'a pas fonctionné.

Merci d'avance pour votre tolérance et votre compréhension.

 
Zhunko:
Connaissez-vous la différence entre un nombre et un chiffre ?


: )) Oui, bien sûr, je comprends la différence. Mais dans un billet d'excuse et de clarification, j'ai quand même fait cette bourde (Comment obtenir le bon chiffre sans arrondir...), j'ai dû corriger (et je ne l'ai pas remarqué immédiatement). Ce n'est pas un malentendu, c'est l'autre facette du développement de l'imagerie. Hélas - c'est son prix. Quand ils disent "mort-vivant" ou quelque chose de similaire, cela n'a pas non plus de sens. Mais sans elle, il est impossible de percevoir l'essence des choses au sens figuré. Je veux dire que c'est normal. Ne jugez pas. : ) Il ne faut pas non plus prendre les choses au pied de la lettre. - Je vais essayer, notamment avec votre aide, de corriger ma communication. Ensemble, nous rendrons la vie meilleure et plus parfaite. Merci pour vos commentaires !
 
Chiripaha:

: )))))))) Oui, c'est ça. Tous les reproches sont acceptés ! - Pour cela, je m'excuse encore. - C'est toutes les conséquences d'un fort développement (par des exercices spéciaux)

côté créatif, imaginatif, poétique, etc. - tout de même, il y a deux hémisphères chez un être humain : le créatif et le rationnel. Ma faute est de l'avoir vu et de ne pas l'avoir corrigé.

Donc toutes vos affirmations sont justes et je suis coupable.

Mais seule la question reste en suspens...

Comment résoudre le problème à la fin ?

Si vous pensez que je n'ai pas entendu quelque chose, veuillez clarifier. Je comprends la technique du feedback (pour pouvoir "entendre"), mais je n'ai pas encore vu de solution.

Comment obtenir le bon nombre sans arrondir en Double, jusqu'à la 3ème décimale, par exemple dans la valeur de Ask = 1,20667 ?- Une solution comme "StrToDouble(DoubleToStr(Ask,3)) = 1,2100 // 1,2100 est le résultat (c'est-à-dire l'arrondi)" n'a pas fonctionné.

Merci d'avance pour votre tolérance et votre compréhension.

DoubleToStr(Ask,3) ! !! - C'était quelque chose à voir.

Et la solution est dans le fichier (c'est un script de test).

Dossiers :
test_ind.mq4  2 kb
Raison: