Maxim Kuznetsov: En fonction de vos objectifs, il est parfois utile de passer aux chiffres entiers. Cela permet d'économiser beaucoup de nerfs :-) Une fois, j'ai eu une tâche, où je devais marquer précisément plusieurs niveaux, au début j'ai eu du mal avec le double, et puis j'ai tout converti en points entiers à partir de 0 et tout est devenu facile, simple et sans erreur.
C'est exactement ce que j'ai fait. Je l'ai converti en nombres entiers.
Si vous utilisezMathFloor ou MathCeil pour l'arrondi, vous devez normaliser le résultat original à la précision correcte.
En effet, lors d'un calcul, au lieu d'un nombre entier, vous pouvez obtenir un nombre fractionnaire, et à cause de cette "queue" du nombre est mal arrondie, le résultat est incorrect. Par exemple :
l'exemple ci-dessus avec le nombre 1156.12, ce nombre est stocké en mémoire comme 1156.11999999999999891
c'est-à-dire que si vous essayez de l'arrondir au centième, vous obtenez 1156,11 au lieu de 1156,12, ce qui est la "particularité" qui vous a fait vous creuser la tête.
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
En fonction de vos objectifs, il est parfois utile de passer aux chiffres entiers. Cela permet d'économiser beaucoup de nerfs :-) Une fois, j'ai eu une tâche, où je devais marquer précisément plusieurs niveaux, au début j'ai eu du mal avec le double, et puis j'ai tout converti en points entiers à partir de 0 et tout est devenu facile, simple et sans erreur.
Vous n'avez pas besoin d'utiliser les arrondis, sauf si la tâche l'exige.
C'est ça le problème : les tâches sont différentes :-)
Si vous utilisezMathFloor ou MathCeil pour l'arrondi, vous devez normaliser le résultat original à la précision correcte.
En effet, lors d'un calcul, au lieu d'un nombre entier, vous pouvez obtenir un nombre fractionnaire, et à cause de cette "queue" du nombre est mal arrondie, le résultat est incorrect.
Par exemple :
Print (DoubleToStr(1156.12/point, 15));
Print (NormalizeDouble(1156.12/point, _Digits));
essayons maintenant d'arrondir avecMathFloor
Print (DoubleToStr(MathFloor(1156.12/point), 15));
Print (MathFloor(NormalizeDouble(1156.12/point, _Digits)));
Si je normalise le nombre à 1,05 - il se normalisera à 1,1, ce qui en principen' estpas ce dont j'ai besoin en utilisantMathFloor :-)
Car je n'utiliserais pasdu tout MathFloor.
Mais le problème est différent.
Но задача то другая.
Pourquoi est-ce différent ? Vous avez dit que vous aviez besoin d'arrondir à l'inférieur - MathFloor fait exactement cela.
Pourquoi est-ce différent ? Vous avez dit que vous deviez arrondir à l'inférieur - c'est ce que fait MathFloor.
oui !!! mais si je fais une normalisation, cela va arrondir les maths à l'inférieur etMathFloor n'aura plus de sens.
l'exemple ci-dessus avec le nombre 1156.12, ce nombre est stocké en mémoire comme 1156.11999999999999891
c'est-à-dire que si vous essayez de l'arrondir au centième, vous obtenez 1156,11 au lieu de 1156,12, ce qui est la "particularité" qui vous a fait vous creuser la tête.
l'exemple ci-dessus avec le nombre 1156.12, ce nombre est stocké en mémoire comme 1156.11999999999999891
c'est-à-dire que si vous essayez d'arrondir au centième, vous obtiendrez 1156.11 au lieu de 1156.12 - c'est la "particularité" de votre problème.
Oui :-) Merci.