Le flottement de Javascript soustrait

Je me demandais comment puis-je soustraire deux nombres flottants négatifs en javascript. J'ai essayé:

alert(-0.2-0.1); 

Et le résultat est -0.30000000000000004 . Est-ce que je fais quelque chose de mal? Que dois-je faire pour obtenir -0.3 ?

Non, rien de mal avec votre code, la plupart des fractions décimales ne peuvent pas être représentées exactement en binaire, utiliser

 number.toFixed(x) 

x est le nombre de décimales que vous voulez et le number est le résultat de la soustraction.

La raison de votre problème est expliquée ici: Pourquoi l'opérateur de module affiche-t-il un nombre fractionnaire en javascript?

Une solution possible pourrait être:

 <script type="text/javascript"> var result = (-20-10)/100; alert("My result is "+result); </script> 

toFixed() est ce que vous devez rechercher.

Par exemple

 number.toFixed(x); 

Où x est le nombre de chiffres après la virgule décimale. Il est optionnel avec une valeur par défaut de 0.

Plus ici: la méthode Javascript Number.toFixed ()

Vous ne faites rien de mal, ce que vous voyez, c'est l'effet secondaire des ordinateurs qui stockent des nombres dans la base 2. Dans la base 10, 1/3 ne peut pas être représenté avec précision: .33333333 (avec une barre sur 3). Il en va de même pour 1/10 et 1/5 en base 2 ou en binaire. La réponse que vous voyez n'est que le résultat d'une erreur d'arrondissement. Si vous travaillez avec de l'argent, il est souvent conseillé de stocker les valeurs en cents pour éviter certaines erreurs en virgule flottante.

En ce qui concerne la fixation du résultat, vous pouvez faire quelque chose comme:

 var SIGDIG= 100000000; alert( Math.floor((-0.2-0.1)*SIGDIG)/SIGDIG ); 

Une autre solution possible pourrait être la suivante:

 Number((-0.2-0.1).toFixed(x)) 

Où x devrait être la tolérance en décimales que vous souhaitez.

Exécuter ceci avec un x de 16, me donne une sortie de -0.3 .

 -0.3 === Number((-0.2-0.1).toFixed(16)) // true, and also with every 0 < x < 16 

Faites le moi savoir.