Taille de la position retournant une valeur négative - page 2

 
NoLimitations:

Je viens également d'essayer de l'utiliser, sans succès. Il est possible que le DTS modifie simplement la précision d'une valeur pour l'apparence et non la valeur réelle ? Je ne vois pas d'autres options.

Oui, je pense que la chaîne de caractères fait juste de la valeur dans le double une version imprimable de celle-ci, mais ne la modifie pas. Je ne suis pas sûr de savoir comment le faire en MQL, mais je sais qu'en Java vous pouvez forcer une conversion de type d'un type à un autre (dans ce cas, double à int).

Extrait de la documentation d'Oracle à l'adresse http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html. Il ne s'agit que d'une petite partie du code présenté.

// Casting conversion (5.4) of a float literal to
// type int. Without the cast operator, this would
// be a compile-time error, because this is a
// narrowing conversion (5.1.3):
int i = (int)12.5 f;
// String conversion (5.4) of i's int value:
System.out.println("(int)12.5f==" + i);

Dans votre cas, je pense que vous devriez le faire dire quelque chose comme

int intConvertedDouble = (int) valueYouGotItFrom;

Évidemment, vous devrez ajuster les noms pour qu'ils correspondent mieux à votre code.

http://www.studytonight.com/java/type-casting-in-java le couvre également. Comme Java et MQL sont tous deux censés être basés sur C++, cela pourrait vous aider.

 

@OP ainsi que la lecture de tous les liens MQL4 précédemment postés, voir Working With Doubles et PrintFormat.

@JD4 Je ne vois pas en quoi le fait de poster du code Java et de faire référence aux spécifications Java aide le PO. De plus, Java et C++ sont similaires mais je ne suis pas d'accord pour dire qu'ils sont basés sur C++.

Bien que vous essayiez d'être utile, je pense que beaucoup de vos réponses, lorsque vous n'êtes pas sûr des réponses vous-même, ne font qu'embrouiller les personnes qui cherchent de l'aide.

 
ydrol:

@OP ainsi que la lecture de tous les liens MQL4 précédemment postés, voir Working With Doubles et PrintFormat.

@JD4 Je ne vois pas en quoi le fait de poster du code Java et de faire référence aux spécifications Java aide le PO. De plus, Java et C++ sont similaires mais je ne suis pas d'accord pour dire qu'ils sont basés sur C++.

Bien que vous essayiez d'être utile, je pense que beaucoup de vos réponses, lorsque vous n'êtes pas sûr des réponses vous-même, ne font qu'embrouiller les personnes qui cherchent de l'aide.

En ce qui concerne vos pensées sur le C++, jetez un coup d'œil à https://www. mql5.com/en/docs/basis. C'est écrit là, et depuis qu'ils ont modifié MQL4 pour qu'il ressemble plus à MQL5(https://docs.mql4.com/mql4changes), cela s'applique également ici. En ce qui concerne ma base de connaissances, je n'ai jamais prétendu être un expert, et je fais savoir aux gens que lorsque je poste si je ne suis pas sûr de quelque chose, au moins j'essaie, mais je peux parfois le manquer.Si je conduis une Chevrolet et que j'ai des problèmes avec elle, je ne vais pas m'asseoir et ignorer les conseils de quelqu'un qui ne travaille que sur les Fords s'ils sont utiles, même s'ils ne sont pas tout à fait exacts. Je ne vais pas non plus m'asseoir et leur dire qu'ils ne pensent pas pouvoir les aider, s'ils le font pour essayer d'être utiles.
 

Je pense que vous avez mal interprété mon message. L'OO de Mql4 est certainement basé sur le C++. Je ne pense pas que cela soit contesté. Je faisais référence à votre affirmation :

JD4: Since Java and MQL are both supposed to be based on C++, this might help you out.

suivi par beaucoup de références Java. J'ai dit -

ydrol: De plus, Java et C++ sont similaires, mais je ne suis pas d'accord pour dire qu'ils sont basés sur C++.

Je parlais spécifiquement de vos références Java. A mon avis, Java n'est pas basé sur c++.

Quoi qu'il en soit, le sujet de la représentation des décimales en virgule flottante a été couvert à plusieurs reprises dans les fils de discussion mentionnés par WHRoeder plus tôt.

Il semble que l'OP veut arrondir à deux décimales, mais sans afficher de résultats ou d'exemples spécifiques, je suppose que le degré d'erreur d'arrondi qu'ils voient peut être ignoré.

 
JD4: Pas selon la page de documentation. https://docs.mql4.com/math/mathround
NoLimitations: JD4 a raison, la page de documentation dit qu'il arrondit au nombre entier le plus proche.

Les deux sont faux. Il arrondit au nombre entier le plus proche. Non pertinent. Il renvoie un double. 1 = 1.0 = 1.00 = 1.00000 = 1.0000000000000000000000000000000000 CHIFFRES INFINIS

Apprenez à connaître la virgule flottante. L'opérande ==. - Forum MQL4



 

Je suppose que WH doit revenir en arrière et se relire, j'ai dit ce que la page disait que la fonction faisait, pas ce qu'elle fait réellement. Et la programmation informatique est l'un des rares endroits où (int) 1 != (double) 1.00000000 (ad infinitum) en ce qui concerne les types de données.


@ ydrol, j'ai manqué la direction de votre intention avec votre déclaration concernant MQL/Java/C++. Quelques documents de référence à consulter concernant l'origine de Java en tant que langage de programmation.

https://en.wikipedia.org/wiki/Java_(langage de programmation)

http://www.freejavaguide.com/history.html

Puisqu'ils disent tous les deux exactement la même chose en ce qui concerne C++, je vais poster à partir de wiki : "Le langage dérive beaucoup de sa syntaxe de C et C++, mais il a moins de facilités de bas niveau que l'un ou l'autre".

 

Du même âge"La syntaxe d'une langue définit sa forme de surface ". (parenthèses, etc.). Ce qui est discuté dans ce fil n'est pas lié à la syntaxe. Mon opinion est que dire "Java est basé sur C++" de la même manière que MQL est une déclaration beaucoup plus forte avec laquelle je ne suis pas d'accord.

Mais comme il s'agit d'une déclaration qualitative, nous pouvons avoir raison et tort en même temps. Je ne vois toujours pas comment les spécifications Java aident le PO, alors qu'il y a des liens spécifiques déjà donnés avec le problème et que ce n'était pas une question liée à la syntaxe.

Les deux articles que vous mentionnez, soulignent que Java emprunte à la syntaxe - mais pas plus. Il ne s'agit pas d'une question liée à la syntaxe.

Cependant, il est lié à la représentation en virgule flottanteIEEE 754 utilisée par MQL, qui est également partagée par les langues. (et beaucoup d'autres qui n'ont pas une syntaxe similaire au c - par exemple Pascal, ou même des applications comme Excel) et c'est vraiment parce que c'est un standard supporté par la plupart des CPU/FPU plutôt que des similarités syntaxiques des langages. Le problème est que la représentation en virgule flottante des fractions décimales a de petites erreurs. L'OP veut arrondir à deux décimales. Le formatIEEE 754 ne peut pas stocker avec précision un dixième (0,1) ou un centième (0,01). Dans le format binaireIEEE 754, il s'agit de fractions binaires récurrentes (de la même manière que 1/3 est une fraction décimale récurrente 0,33333... ) - La différence entre le nombre voulu et le nombre réel est assez faible (par exemple 0,00000000000001 ) mais suffisamment importante pour que

1/10 != 0.1 // probablement

Et int(0.1 * 10) pourrait s'arrondir dans le mauvais sens.

Mais comme l'OP n'a pas posté exactement ce qu'il voit, le meilleur conseil a été donné dans le 3ème message de ce sujet, allez lire les fils MQL. Je ne vois pas l'intérêt de leur suggérer également de lire les spécifications Java après que les fils MQL aient été donnés et qu'ils n'aient probablement aucune familiarité avec Java.

Résumé du fil de discussion :

  • OP : Les chiffres se comportent bizarrement
  • WHRoeader : Voici plusieurs liens avec plusieurs explications pourquoi les points flottants sont bizarres. < La réponse est ici quelque part ...
  • OP : Je les ai reçus, les nombres se comportent toujours bizarrement.
  • JD4 : MQL4 et Java sont basés sur C++, voici quelques liens Java obscurs sur le typecasting et la promotion, que même les développeurs Java trouveraient une lecture difficile.
  • ydrol : En quoi cela aide-t-il le PO exactement ? Je ne suis pas d'accord que Java est basé sur C++ Les réponses ont été postées il y a un certain temps...
  • etc. etc.

 
J'ai posté la façon Java de convertir les types pour 2 raisons. La première était, il est vrai, parce que je suis plus familier avec Java. Et 2, j'ai fait une recherche du code, et peut-être parce que j'étais fatigué quand je l'ai fait, je n'ai pas vu comment le faire dans les docs MQL. Donc, pour essayer d'être utile, j'ai suggéré une solution possible dont j'étais raisonnablement sûr qu'elle fonctionnerait, en me basant sur les présomptions que MQL et Java sont assez proches étant donné leurs comparaisons partagées avec un langage commun, le C++.
 
JD4: Je suppose que WH a besoin de revenir en arrière et de se relire, je disais ce que la page dit que la fonction fait, pas ce qu'elle fait réellement.
  1. Vous devriez peut-être revenir en arrière et relire la question.
    NoLimitations: Pourquoi obtiendrais-je encore des réponses à plusieurs décimales si j'utilise MathRound() ?
    Ce que la page dit, c'est ce qu'elle fait. Il arrondit. Rien à voir avec la question des décimales multiples.
  2. Les décimales multiples sont ce qui se passe lorsque vous imprimez un double sans spécifier le nombre requis.
 
WHRoeder:
JD4: Je suppose que WH doit revenir en arrière et se relire, je disais ce que la page dit que la fonction fait, pas ce qu'elle fait réellement.
  1. Vous devriez peut-être revenir en arrière et relire la question.
    NoLimitations: Pourquoi est-ce que j'obtiendrais toujours des réponses à plusieurs décimales si j'utilise MathRound() ?
    Ce que la page dit, c'est ce qu'elle fait. Il arrondit. Rien à voir avec la question des décimales multiples.
  2. Les décimales multiples sont ce qui se passe lorsque vous imprimez un double sans spécifier le nombre requis.

Ce qui précède était une réponse spécifique à votre post spécifique"MathRound retourne un double ; nombre infini de décimales."

Encore une fois, selon la page de documentation.

"Valeur de retour

Valeur arrondie au nombre entier le plus proche."

Maintenant, une réponse spécifique à cette partie de votre post.

"Ce que la page dit, c'est ce qu'il fait. Elle arrondit. Rien à voir avec la question des décimales multiples."

Encore une fois, relisez la citation, elle dit qu'elle renvoie "Valeur arrondie à l'entier le plus proche". Un entier, par définition, est un nombre entier, c'est-à-dire sans décimales. Et encore une fois, si ce n'est pas ce qu'elle fait réellement, alors le code ou la description est cassé, et l'un ou l'autre ou les deux doivent être corrigés par MQ, ou bien une étiquette d'avertissement indiquant que ces fonctions ne fonctionnent pas comme annoncé.

Si elle renvoie effectivement le type qui lui est donné, mais à l'équivalent mathématique de la valeur de l'entier le plus proche (comme dans renvoie 1.00000 à partir de 1.23456, et 1 == 1.00000) mais ne renvoie pas un type d'entier réel, alors la page de référence doit spécifier quelque chose comme "ne change pas le type de données sous-jacent" ou une autre manière qui soit clairement indiquée.

Raison: